# 默认情况下,不区分大小写

如: 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 下数据库名、表名、列名、别名大小写规则是这样的:

  1. 数据库名与表名是严格区分大小写的;

  2. 表的别名是严格区分大小写的;

  3. 列名与列的别名在所有的情况下均是忽略大小写的;

  4. 变量名也是严格区分大小写的; MySQL 在 Windows 下都不区分大小写

collate(校对)规则:

-bin: 表示的是 binary case sensitive collation,也就是说是区分大小写
_cs: case sensitive collation,区分大小写
_ci: case insensitive collation,不区分大小写

解决方法一:

  1. 可以将查询条件用 binary()括起来。 比如:

    select * from TableA where binary columnA ='aaa';
    
  1. 可以修改该字段的 collation 为 binary

    ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
    

原理

对于 CHAR、VARCHAR 和 TEXT 类型,BINARY 属性可以为列分配该列字符集的 校对规则。 BINARY 属性是指定列字符集的二元 校对规则的简写。 排序和比较基于数值字符值。因此也就自然区分了大小写。