MySQL 大小写问题

场景

在做mysql 查询的时候,注意到一个问题,mysql 默认是不区分大小写的
通过简单的查询,发现
通过关键字 binary 可以强制区分大小写
参考每日所得-- 分页查询优化 和 mysql 区分大小写问题

那为什么MySQL不区分大小写呢
参考文档 mysql 不区分大小写 技术原理

文章总结

1、是否区分是 取决于 字符集和校对(Collation)部分 所做的工作
2、取决于字符集中是否声明了大小写敏感

声明之后,开销增加
参考 https://www.cnblogs.com/niuben/p/11250247.html

配置参数

Mysql中控制数据库名和表名的大小写敏感由参数lower_case_table_names控制
MySQL 大小写问题_第1张图片

lower_case_file_system

此变量描述数据目录所在的文件系统上文件名的区分大小写。 OFF表示文件名区分大小写,ON表示它们不区分大小写。此变量是只读的,因为它反映了文件系统属性并设置它对文件系统没有影响。

lowercasetable_names

该参数为静态,可设置为0、1、2。

0 --大小写敏感。(Unix,Linux默认) 创建的库表将原样保存在磁盘上。如create database TeSt;将会创建一个TeSt的目录,create table AbCCC …将会原样生成AbCCC.frm。 SQL语句也会原样解析。

1 --大小写不敏感。(Windows默认) 创建的库表时,MySQL将所有的库表名转换成小写存储在磁盘上。 SQL语句同样会将库表名转换成小写。 如需要查询以前创建的Testtable(生成Testtable.frm文件),即便执行select * from Testtable,也会被转换成select * from testtable,致使报错表不存在。

2 --大小写不敏感(OS X默认) 创建的库表将原样保存在磁盘上。 但SQL语句将库表名转换成小写

On Windows the default value is 1. On macOS, the default value is 2. On Linux, a value of 2 is not supported; the server forces the value to 0 instead.

在Windows上,默认值为1。在macOS上,默认值为2。在Linux上不支持值2;服务器强制该值为0。

并且官网也提示说:如果在数据目录驻留在不区分大小写的文件系统(例如Windows或macOS)上的系统上运行MySQL,则不应将lowercasetable_names设置为0。

你可能感兴趣的:(今日所得)