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 06 MySQL
详解MySQL连接挂死的原因
May 18 MySQL
MySQL 数据类型选择原则
May 27 MySQL
SQL注入的实现以及防范示例详解
Jun 02 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
Jun 18 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
MySQL约束超详解
Sep 04 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
mysql事务隔离级别详情
Oct 24 MySQL
分析MySQL优化 index merge 后引起的死锁
Apr 19 MySQL
mysql5.5中文乱码问题解决的有用方法
May 30 MySQL
MySQL示例讲解数据库约束以及表的设计
Jun 16 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开启openssl的方法
2014/05/15 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
vue项目实战总结篇
2018/02/11 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
js实现移动端轮播图
2020/12/21 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
python3下实现搜狗AI API的代码示例
2018/04/10 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
如何利用python发送邮件
2020/09/26 Python
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
优秀班干部事迹材料
2014/01/26 职场文书
物理力学求职信
2014/02/18 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
廉政承诺书范文
2015/04/28 职场文书