mysql为什么推荐以小写字母加下划线作表命名
场景介绍
最近,有位开发同事在mac下作开发,在建表时总是报错数据库表已存在,但在数据库show tables 发现并没有这张表。
在这里和大家分享下经历,难免会有些许错误,请各位看官不吝赐教。
原由分析
根本原因是在mac os 下mysql是默认大小写不敏感的。而启决定作用的就是lower_case_table_names参数。
os | linux | mac | windows |
---|---|---|---|
大小写默认参数值 | 0 | 2 | 1 |
表名大小写 | 敏感 | 不敏感 | 不敏感 |
字段名大小写 | 不敏感 | 不敏感 | 不敏感 |
其余变量名大小写 | 敏感 | 不敏感 | 不敏感 |
之所以会有差异,是因为这些不同操作系统使用的文件系统不一致导致的。数据库始终还是基于磁盘文件之上做的管理,附录有详细介绍。
解决方式
点个题,其实这就是为什么mysql推荐以小写字母加下划线作表命名的原因。为了不同系统之间的兼容性,为了避免发生大小写引发的问题,推荐不使用任何大写字母。
附录lower_case_table_names参数值说明
参数值 | 官方说明 |
---|---|
0 | 使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。在大小写不敏感的操作系统如windows或Mac OS x上我们不能将该参数设为0,如果在大小写不敏感的文件系统上将–lowercase-table-names强制设为0,并且使用不同的大小写访问MyISAM表名,可能会导致索引破坏。 |
1 | 表名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名转换为小写在存储和查找表上。该行为也适合数据库名和表的别名。该值为Windows的默认值。 |
2 | 表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注释:只在对大小写不敏感的文件系统上适用! innodb表名用小写保存。 |