mysql中的大小写

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

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

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

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

4、字段内容默认情况下是大小写不敏感的。


解决办法:

方法一:查询时指定大小写敏感。

方法二:定义表结构时指定字段大小写敏感。

方法三:修改排序规则(COLLATION)。


1:查询时指定大小写敏感

MySQL允许在查询的时候指定以大小写“敏感”方式,需要使用关键字“BINARY”,改写上述查询如下:

SELECT * FROM fruit WHERE BINARY name = 'Apple'

或者

SELECT * FROM fruit WHERE name = BINARY 'Apple'

但是这个方法也存在很大的限制:如此可能因为无法使用索引导致查询性能下降。原因很好理解,因为此时针对查询字段的索引也是按照大小写不敏感方式建立的。除非数据量不大,或者在你的应用中不在乎这点性能上的损失


2:定义表结构时指定字段大小写敏感

以下代码在创建fruit表时指定其中的name字段大小写“敏感”:

CREATE TABLE fruit (

...

name VARCHAR(64) BINARY NOT NULL,

...

)

关键字“BINARY”指定name字段大小写敏感。如此在查询时就算不使用“BINARY”关键字


3:修改排序规则(COLLATION)

涉及字符串的各种运算其核心必然涉及到采用何种字符排序规则(Collation,也有翻译为“核对”)。本质上MySQL是通过Collation取值决定字符串运算是否大小写敏感。

“utf8_general_ci”是一个具体的Collation取值。每个具体的Collation都对应唯一的字符集,可以看出该Collation对应字符集为“utf8”。而与大小写敏感问题相关的是其后缀“_ci”,MySQL官方文档对其的解释是“Case Ignore”的缩写,即大小写不敏感。由于MySQL将“utf8_general_ci”指定作为字符集utf8的默认Collation。与此同时,MySQL也提供了其它的Collation取值选项,“utf8_bin”就是大小写敏感的。事实上所有大小写敏感的Collation都以“_bin”或“_cs”为后缀,前者是“Binary”的缩写,后者是“Case Sensitive”的缩写。

MySQL数据库允许在“库”、“表”和“列”三个级别上指定Collation。当同时指定时,优先关系是:列>表>库。

你可能感兴趣的:(mysql中的大小写)