龙空技术网

MySQL踩坑系列之3 唯一索引之表名大小写

IT工程师1024 122

前言:

今天看官们对“mysql不区分大小写吗”大体比较重视,小伙伴们都需要了解一些“mysql不区分大小写吗”的相关文章。那么小编同时在网上收集了一些对于“mysql不区分大小写吗””的相关知识,希望姐妹们能喜欢,大家一起来学习一下吧!

目录背景复现如何避免

背景

某天有个做研发的同学找到我,说数据库表从某个地方迁移到了新地方发现,明明表存在,结果程序读不到了。一听这个,直觉就告诉我是表名称大小写的问题。

复现

场景1:

(vt_dba@localhost) [test2023013101] >pager grep t1;PAGER set to 'grep t1'(vt_dba@localhost) [test2023013101] >show tables;| t1                       |1 row in set (0.01 sec)(vt_dba@localhost) [test2023013101] >select * from T1;Empty set (0.00 sec)

场景2:

(vt_dba@localhost) [vt_unibase_test] >pager grep t1;PAGER set to 'grep t1'(vt_dba@localhost) [vt_unibase_test] >show tables;| t1                        |17 rows in set (0.00 sec)(vt_dba@localhost) [vt_unibase_test] >select * from T1;ERROR 1146 (42S02): Table 'vt_unibase_test.T1' doesn't exist

同样的场景下,为什么一个可以一个不可以呢?,其实就是参数lower_case_table_names在做怪。我们看看参数的解释,大家就明白了。

1.lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的2.lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写3.lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的4.unix,linux下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2
如何避免
1.养成良好的编码习惯,数据库里的东西,库名、表名、字段名都使用小写,以避免参数配置不当的场景引发问题。2.初始化部署的时候,将参数lower_case_table_names 设置成1,以避免引发问题。

标签: #mysql不区分大小写吗 #mysql大小写设置 #mysql数据区分大小写吗 #mysql查询表名能大写开头吗 #mysql用户名区分大小写吗