查询判断时的大小写敏感

在明确大小敏感的条件前加 BINARY :

SELECT * FROM `learn` WHERE BINARY NAME = 'bob' AND BINARY city = 'beijing';
SELECT * FROM `learn` WHERE BINARY `name` LIKE '%i%';

# REGEXP 注意BINARY位置不一样
SELECT * FROM `learn` WHERE `name` REGEXP BINARY 'i';

数据库名和表名的大小写敏感

如果你遇到的是找不到数据库找不到表之类的问题, 那么可以看看是不是其中存在大写字母.

将他们改成小写,再在my.cnf里添加这么一项:

[mysqld]
lower_case_table_names=1

重启mysql:

mysql.server restart

验证:

mysql> show VARIABLES like '%case%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | ON    |
| lower_case_table_names | 1     |
+------------------------+-------+
2 rows in set (0.00 sec)

具体Windows/MacOS/Linux的路径大小写敏感情况具体如何太麻烦了, 推荐的做法是用mysql的时候,数据库名/表名/字段名 全部小写,用 _ 分隔. (然而这个配置并不能让sql判断时大小敏感,很多文章都有歧义)

其他

用brew装的mysql,没找到my.cnf在哪… 手动在mysql的配置查找目录下新建一个:

Default options are read from the following files in the given order:

/etc/my.cnf

/etc/mysql/my.cnf

/usr/local/etc/my.cnf

~/.my.cnf