MySQL中大小写敏感涉及的属性以及查询如何区分大小写
Posted javartisan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中大小写敏感涉及的属性以及查询如何区分大小写相关的知识,希望对你有一定的参考价值。
Property | Value |
---|---|
System Variable | lower_case_file_system |
Scope | Global |
Dynamic | No |
Type | Boolean |
该变量用于设置数据库在检索数据目录时候是否区分大小学,OFF意味着是大小写敏感的;ON意味着大小写不敏感。这是一个只读属性,修改该变量不会对文件系统产生影响。
Property | Value |
---|---|
Command-Line Format | --lower-case-table-names[=#] |
System Variable | lower_case_table_names |
Scope | Global |
Dynamic | No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 2 |
值以及含义:
lower-case-table-names | 存储大小写 | 比较是否区分大小写 |
0 | 真实名字存储 | 大小写敏感 |
1 | 转换小写存储 | 不敏感 |
2 | 真实名字存储 | 转化为小写比较 |
操作系统文件是否大小写敏感:
操作系统 | 大小写敏感 |
Window | 不敏感 |
Mac | 不敏感 |
Linux | 敏感 |
对于Window系统,默认值为0;对于Mac默认值为2,但是对Linux由于不支持2,因此强制设置为0.
对于大小写不敏感的文件系统不应该设置0,这是一个错误的设置,例如Window或者Mac,否则当SQL中表名大小写与真实表名不一致时候报错。
对于MyISAM,使用不同字母大小写会导致索引崩溃。对于InnoDB,在任何平台都应该设置该值为1,强制将名字转化为小写。
拓展:
对于mysql默认的like 以及 = 判等的比较默认是不区分大小写的,如果区分大小写可以使用BINARY关键字,BINARY关键字是将字符串转化为byte,之后根据byte值比较字符串。例如:
join区分大小写:
select *
from tab_a a1
join tab_a a2 on binary a1.id = a2.id
like 区分大小写:
select *
from tab_a a1
where binary id like 'a';
纳尼?!如下查询:
mysql> SELECT 'a' = 'a ';
+--------------+
| 'a' = 'a ' |
+--------------+
| 1 |
+--------------+
mysql比较字符串会去空格?!!!是的,MySQL是将尾部空格去掉进行比较。如果想保留空格的话需要使用BINARY关键字。例如:
mysql> SELECT binary 'a' = 'a ';
+----------------------+
| binary 'a' = 'a ' |
+----------------------+
| 0 |
+----------------------+
1 row in set (0.00 sec)
BINARY会是MySQL字符串比较时候的尾部空格生效!!!!SQL官网原文:
The
BINARY
operator converts the expression to a binary string (a string that has thebinary
character set andbinary
collation). A common use forBINARY
is to force a character string comparison to be done byte by byte using numeric byte values rather than character by character. TheBINARY
operator also causes trailing spaces in comparisons to be significant.
参见:
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lower_case_table_names
https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary
以上是关于MySQL中大小写敏感涉及的属性以及查询如何区分大小写的主要内容,如果未能解决你的问题,请参考以下文章