mysql 的条件语句中默认是大小写不敏感的,就是说 ‘a’=’A’ 结果为true;如果才能让 a !=A呢? 使用binary关键字,但是还要注意一下问题:
表结构:
mysql> desc innodb;
+———+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————–+——+—–+———+——-+
| name | varchar(100) | NO | PRI | | |
| content | mediumtext | YES | | NULL | |
+———+————–+——+—–+———+——-+
2 rows in set (0.09 sec)
表内容:
mysql> select * from innodb;
+——+———+
| name | content |
+——+———+
| c | d |
| d | d |
| e | d |
| kkk | ttttt |
+——+———+
4 rows in set (0.01 sec)
查询使用了主键索引:
mysql> desc select * from innodb where name= "C";
+—-+————-+——–+——+—————+———+———+——-+——+————-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——–+——+—————+———+———+——-+——+————-+
| 1 | SIMPLE | innodb | ref | PRIMARY | PRIMARY | 202 | const | 1 | Using where |
+—-+————-+——–+——+—————+———+———+——-+——+————-+
1 row in set (0.00 sec)
使用binary时,主键索引用不上了:
mysql> desc select * from innodb where binary name= "C";
+—-+————-+——–+——+—————+——+———+——+——+————-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——–+——+—————+——+———+——+——+————-+
| 1 | SIMPLE | innodb | ALL | NULL | NULL | NULL | NULL | 4 | Using where |
+—-+————-+——–+——+—————+——+———+——+——+————-+
1 row in set (0.01 sec)
修改表结构,直接将列设置为
mysql> alter table innodb modify name varchar(100) BINARY NOT NULL default ” ;
Query OK, 4 rows affected (0.40 sec)
Records: 4 Duplicates: 0 Warnings: 0
显示name列是binary的了,查看一下:
mysql> show create table innodb;
+——–+———————————————————————————
| Table | Create Table
+——–+———————————————————————————
| innodb | CREATE TABLE innodb
(
name
varchar(100) character set gbk collate gbk_bin NOT NULL default ”,
content
mediumtext,
PRIMARY KEY (name
)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+——–+———————————————————————————
1 row in set (0.01 sec)
再测试select看看是否能用上索引:
mysql> desc select * from innodb where name= "C";
+—-+————-+——-+——+—————+——+———+——+——+—————————————————–+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——-+——+—————+——+———+——+——+—————————————————–+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE noticed after reading const tables |
+—-+————-+——-+——+—————+——+———+——+——+—————————————————–+
1 row in set (0.00 sec)
很遗憾,索引还是没有用上
结论: 主键不要设置为binary的,否则索引无效,如果真的希望主键是大小写敏感的,可能有别的办法,继续探索。。。
binary的试试: