# 默认情况下,不区分大小写
如: CREATE TABLE NAME(name VARCHAR(10));
对这个表,缺省情况下,下面两个查询的结果是一样的:
SELECT * FROM TABLE NAME WHERE name='clip';
SELECT * FROM TABLE NAME WHERE name='Clip';
MySql 默认查询是不区分大小写的
如果需要区分他,必须在建表的时候,Binary 标示敏感的属性.
CREATE TABLE NAME(
name VARCHAR(10) BINARY
);
此时需要使用BINARY关键字来查询:
SELECT * FROM TABLE NAME WHERE BINARY name='Clip';
关于字符集
utf8_general_ci --不区分大小写
utf8_bin --区分大小写
# 设置 MySQL 支持大小写
MySQL 在windows下是不区分大小写的,将 script 文件导入 MySQL 后表名也会自动转化为小写
在linux下表名区分大小写
关键在于这个配置
lower_case_table_names = 0
其中 0:区分大小写,1:不区分大小写
MySQL 在 Linux 下数据库名、表名、列名、别名大小写规则是这样的:
数据库名与表名是严格区分大小写的;
表的别名是严格区分大小写的;
列名与列的别名在所有的情况下均是忽略大小写的;
变量名也是严格区分大小写的; MySQL 在 Windows 下都不区分大小写
collate(校对)规则:
-bin: 表示的是 binary case sensitive collation,也就是说是区分大小写的
_cs: case sensitive collation,区分大小写
_ci: case insensitive collation,不区分大小写
解决方法一:
可以将查询条件用 binary()括起来。 比如:
select * from TableA where binary columnA ='aaa';
可以修改该字段的 collation 为 binary
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
原理
对于 CHAR、VARCHAR 和 TEXT 类型,BINARY 属性可以为列分配该列字符集的 校对规则。 BINARY 属性是指定列字符集的二元 校对规则的简写。 排序和比较基于数值字符值。因此也就自然区分了大小写。