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下都不區分大小寫。