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 07 MySQL
Mysql systemctl start mysqld报错的问题解决
Jun 03 MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
Jul 01 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
Mysql排序的特性详情
Nov 01 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
Pycharm远程调试和MySQL数据库授权问题
Mar 18 MySQL
mysql insert 存在即不插入语法说明
Mar 25 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
MySQL远程无法连接的一些常见原因总结
Sep 23 MySQL
MySQL数据管理操作示例讲解
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中在PDO中使用事务(Transaction)
2011/05/14 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
python 输出一个两行字符的变量
2009/02/05 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
Python列表切片用法示例
2017/04/19 Python
python 2.7.14安装图文教程
2018/04/08 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
浅谈django orm 优化
2018/08/18 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
adidas泰国官网:adidas TH
2020/07/11 全球购物
大学生学雷锋活动总结
2014/06/26 职场文书
2014年维稳工作总结
2014/11/18 职场文书
老龙头导游词
2015/02/11 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang
python+opencv实现视频抽帧示例代码
2021/06/11 Python
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android