MySQL大小写敏感的注意事项


Posted in MySQL onMay 24, 2021

由于这个原因,在阿里巴巴规约中这样要求:

【强制】表名、字段名必须使用小写字母或数字 , 禁止出现数字开头,禁止两个下划线中间只 出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免引起不必要的麻烦。

MySQL的大小写敏感是由参数控制的

mysql大小写敏感配置相关的两个参数,lower_case_file_system 和 lower_case_table_names。

查看当前mysql的大小写敏感配置,可以使用如下语句

show global variables like '%lower_case%';

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | ON    |
| lower_case_table_names | 0     |
+------------------------+-------+

参数说明如下:

1.lower_case_file_system,代表当前系统文件是否大小写敏感,只读参数,无法修改。ON 大小写不敏感,OFF 大小写敏感。

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

2.lower_case_table_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语句将库表名转换成小写。

MySQL大小写敏感如何设置

在Linux系统中修改my.cnf文件,在Windows下修改my.ini文件,新增或修改以下内容。

lower_case_table_names = 0 或 lower_case_table_names = 1

然后重启MySQL服务才可以生效。

开发注意事项

  • 如果要将lower_case_table_names从0(敏感)修改为1(不敏感)时,必须先对旧数据表的表名进行处理,把所有数据库的表名先改为小写,最后再设置lower_case_table_names为1,否则依然会出现无法找到表名的问题。
  • 在Windows上lower_case_table_names默认值为1(不敏感),在macOS上默认值为2(不敏感)。在Linux上不支持值2,服务器强制该值为0(敏感)。
  • 并且MySQL官方也提示说:如果在数据目录驻留在不区分大小写的文件系统(例如Windows或macOS)上,则不应将lower_case_table_names设置为0。
  • 否则将出现MySQL服务无法启动的问题。

总结

由于操作系统不同导致大小写敏感的默认设置不一致,我们在开发时一定要注意,应该养成严格的意识,SQL语句一律采用小写字母,避免无意义的踩坑。

以上就是MySQL大小写敏感的注意事项的详细内容,更多关于MySQL大小写敏感的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
MySQL数字类型自增的坑
May 07 MySQL
MySQL查询学习之基础查询操作
May 08 MySQL
MySQL 如何分析查询性能
May 12 MySQL
MySQL优化之如何写出高质量sql语句
May 17 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
mysql优化之query_cache_limit参数说明
Jul 01 MySQL
mysql备份策略的实现(全量备份+增量备份)
Jul 07 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
单机多实例部署 MySQL8.0.20
May 15 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 #MySQL
MySQL触发器的使用
May 24 #MySQL
MySQL 重命名表的操作方法及注意事项
May 21 #MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 #MySQL
MySQL官方导出工具mysqlpump的使用
May 21 #MySQL
新手必备之MySQL msi版本下载安装图文详细教程
MySQL数据库压缩版本安装与配置详细教程
You might like
Zend的AutoLoad机制介绍
2012/09/27 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
JavaScript confirm选择判断
2008/10/18 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
python实现求最长回文子串长度
2018/01/22 Python
Django进阶之CSRF的解决
2018/08/01 Python
django Admin文档生成器使用详解
2019/07/22 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
二人合伙经营协议书
2014/09/13 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
酒店开业主持词
2015/07/02 职场文书