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 msi版本下载安装图文详细教程
May 21 MySQL
Mysql实现主从配置和多主多从配置
Jun 02 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
mysql连接查询中and与where的区别浅析
Jul 01 MySQL
ORM模型框架操作mysql数据库的方法
Jul 25 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
解析MySQL索引的作用
Mar 03 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
SQL语句多表联合查询的方法示例
Apr 18 MySQL
MySQL优化之慢日志查询
Jun 10 MySQL
MySQL count(*)统计总数问题汇总
Sep 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
迅速确定php多维数组的深度的方法
2014/01/07 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
js数组的操作指南
2014/12/28 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
vue实现弹幕功能
2019/10/25 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
Python requests获取网页常用方法解析
2020/02/20 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
python脚本和网页有何区别
2020/07/02 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
简单叙述一下MYSQL的优化
2016/05/09 面试题
大学自我鉴定范文
2013/12/26 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
质量月活动总结
2014/08/26 职场文书
家庭困难证明
2014/10/12 职场文书
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js