首頁  >  文章  >  後端開發  >  解讀mysql大小寫敏感配置問題

解讀mysql大小寫敏感配置問題

jacklove
jacklove原創
2018-06-08 17:04:292714瀏覽

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     |+------------------------+-------+

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

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


建立表格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;
1.設定lower_case_table_names = 0

表名與建立時大小寫一致

select count(*) from user;
+----------+| count(*) |
+----------+|        0 |
+----------+

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

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

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

 2.設定lower_case_table_names = 1

表名與建立時大小寫一致

select count(*) from user;
+----------+| count(*) |
+----------+|        0 |
+----------+
表名與建立時大小寫不一致

select count(*) from user;
+----------+| count(*) |
+----------+|        0 |
+----------+

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           |
+----------------+

再設定

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
#因為lower_case_table_names=1時,會先把表名轉為小寫後再操作,而文件中根本不存在小寫的表名文件,因此出錯。

 

解決方法:


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


總結:

作業系統不同導致大小寫敏感不一致。我們在開發時,應該按大小寫敏感的原則去開發,這樣可以使開發的程式相容於不同的作業系統。因此,建議在開發測試環境下把lower_case_table_names的值設為0,方便在開發中就嚴格控製程式碼大小寫敏感,提高程式碼的相容和嚴謹。
本篇文章解釋了mysql大小寫敏感配置問題,更多相關內容請關注php中文網。

###相關推薦:#########如何使用php合併數組並保留鍵值的方法###############如何利用phpcurl實現多進程下載檔案類別###############如何透過php判斷本機及遠端檔案是否存在#########

以上是解讀mysql大小寫敏感配置問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn