1. 程式人生 > >mysql大小寫敏感配置

mysql大小寫敏感配置

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                       

1.mysql大小寫敏感配置

mysql大小寫敏感配置相關的兩個引數,lower_case_file_system

lower_case_table_names

檢視當前mysql的大小寫敏感配置

show global variables like '%lower_case%';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| lower_case_file_system | ON    || lower_case_table_
names | 0     |+------------------------+-------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

lower_case_file_system

表示當前系統檔案是否大小寫敏感,只讀引數,無法修改。

ON   大小寫不敏感
OFF 大小寫敏感
 

lower_case_table_names

表示表名是否大小寫敏感,可以修改。

lower_case_table_names = 0時,mysql會根據表名直接操作,大小寫敏感。
lower_case_table_names = 1時,mysql會先把表名轉為小寫,再執行操作。
 

設定lower_case_table_names的值

開啟my.cnf檔案,加入以下語句後重啟。

lower_case_table_names = 0 或 lower_case_table_names = 1
   
  • 1


2.測試lower_case_table_names為0和1時的不同情況

建立表 user

CREATE TABLE `user``id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULLPRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
   
  • 1
  • 2
  • 3
  • 4
  • 5

 

1.設定lower_case_table_names = 0

表名與建立時大小寫一致

select count(*) from user;+----------+| count(*) |+----------+|        0 |+----------+
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

表名與建立時大小寫不一致

select count(*) from User;ERROR 1146 (42S02): Table 'user.User' doesn't exist
   
  • 1
  • 2

lower_case_table_names=0時,表名大小寫敏感。
 

2.設定lower_case_table_names = 1

表名與建立時大小寫一致

select count(*) from user;+----------+| count(*) |+----------+|        0 |+----------+
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

表名與建立時大小寫不一致

select count(*) from User;+----------+| count(*) |+----------+|        0 |+----------+
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

lower_case_table_names=1時,表名大小寫不敏感。
 

3.設定lower_case_table_names=1時,原來在lower_case_table_names=0時建立的表提示不存在的解決方法

lower_case_table_names=0時使用大小寫混用建立表名,再設定lower_case_table_names=1後,原建立的表使用時會提示不存在。
 

演示

首先設定lower_case_table_names=0

建立表 User(大小寫混用)

CREATE TABLE `User` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;show tables;+----------------+| Tables_in_user |+----------------+| User           |+----------------+
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

再設定lower_case_table_names=1

執行查詢,不管表名是大寫還是小寫,都提示表不存在

select * from User;ERROR 1146 (42S02): Table 'user.user' doesn't existselect * from user;ERROR 1146 (42S02): Table 'user.user' doesn't existselect * from USER;ERROR 1146 (42S02): Table 'user.user' doesn't exist
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

因為lower_case_table_names=1時,會先把表名轉為小寫後再操作,而檔案中根本不存在小寫的表名檔案,因此出錯。
 

解決方法:

如果要將lower_case_table_names從0修改為1時,應先對舊資料表的表名進行處理,把所有資料庫的表名先改為小寫,最後再設定lower_case_table_names為1,否則會出現上述的問題。
 

總結:
作業系統不同導致大小寫敏感不一致。我們在開發時,應該按大小寫敏感的原則去開發,這樣可以使開發的程式相容不同的作業系統。因此,建議在開發測試環境下把lower_case_table_names的值設為0,便於在開發中就嚴格控制程式碼大小寫敏感,提高程式碼的相容和嚴謹。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述