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入门命令之函数-单行函数-流程控制函数
Apr 05 MySQL
MySQL pt-slave-restart工具的使用简介
Apr 07 MySQL
MySQL Shell的介绍以及安装
Apr 24 MySQL
浅谈mysql执行过程以及顺序
May 12 MySQL
MySQL5.7并行复制原理及实现
Jun 03 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
Mysql的Table doesn't exist问题及解决
Dec 24 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
PHP中调用JAVA
2006/10/09 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
Yii框架登录流程分析
2014/12/03 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
2019/10/24 PHP
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
python制作抽奖程序代码详解
2021/01/15 Python
年度考核评语
2014/01/19 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
2014年防汛工作总结
2014/12/08 职场文书
文明家庭事迹材料
2014/12/20 职场文书
共青团员自我评价
2015/03/10 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
win10下go mod配置方式
2021/04/25 Golang
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js