mysql 大小寫敏感問題

賀子_DBA時代發表於2017-07-07
mysql關於大小寫敏感的話題有以下三個:
1,表名字和庫名字 linux/unix 區分大小寫
也就是 你可以建立一個叫test和TEST的兩個表,
但是windows預設是不區分大小寫的,
LINUX:
編輯/etc/my.cnf檔案,在[mysqld]節下 新增 lower_case_table_names=1 引數,這樣就大小寫不區分了,也就不能在一個庫下建立test和TEST的兩個表,並設定相應的值 (備註:為0時大小寫敏感,就是區分大小寫,為1時大小寫不敏感,也就是不區分大小寫,預設為0)
2,表的欄位名字,
linux 下 預設是不區分大小寫的,也就是 一個表中有一個叫id的欄位,就不能建立ID的欄位。
3,表的內容,預設查詢是不區分欄位值的大小寫,
如果想在查詢時區分欄位值的大小寫,則:欄位值需要設定BINARY屬性,設定的方法有多種:
A、建立時設定:
CREATE TABLE T(
A VARCHAR(10) BINARY
);
B、使用alter修改:
ALTER TABLE tablename MODIFY COLUMN cloname VARCHAR(10) BINARY;
具體實驗過程:
mysql> create table ll ( name varchar(100);
mysql> insert into ll values('hh');
Query OK, 1 row affected (0.00 sec)
mysql> insert into ll values('hH');
Query OK, 1 row affected (0.00 sec)
mysql> select * from ll where name='hh';
+------+
| name |
+------+
| hh |
| hH |
+------+
2 rows in set (0.00 sec)
這時候你新增主鍵就會報錯
mysql> alter table ll add primary key (name);
ERROR 1062 (23000): Duplicate entry 'hh' for key 'PRIMARY'
修改表的name列的值為大小寫不敏感。
mysql> alter table ll MODIFY name varchar(100) BINARY;
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from ll where name='hh';
+------+
| name |
+------+
| hh |
+------+
1 row in set (0.00 sec)
然後新增主鍵就沒問題了。
mysql> alter table ll add primary key (name);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

小結:
MySQL在Linux下資料庫名、表名、列名、別名大小寫預設規則是這樣的:
1、資料庫名與表名是嚴格區分大小寫的;
2、表的別名是嚴格區分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、變數名也是嚴格區分大小寫的;
MySQL在Windows下都不區分大小寫。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2141708/,如需轉載,請註明出處,否則將追究法律責任。

相關文章