赞
踩
记一次 SQLServer 迁移至 MySQL 遇到的一个关于 lower_case_table_names 参数的问题。
将 SQLServer 数据库迁移至 MySQL 迁移过后,驼峰命名的表都变成了小写,例如:DooBeDooBa
变成了 doobedooba
本篇文章分析下原因和解决方法。
MySQL 对大小写是否敏感,由 lower_case_table_names 参数来控制,修改此参数需要重启数据库才能生效,该参数由三个选项:
lower_case_table_names = 0
:表名区分大小写,且按照用户指定存储。
mysql> create table CmVotingRecord( -> Id int auto_increment primary key , -> NameInfo varchar(20) -> ); Query OK, 0 rows affected (0.02 sec) mysql> insert into CmVotingRecord value (1, '1'); Query OK, 1 row affected (0.00 sec) mysql> insert into cmvotingrecord value (1, '1'); ERROR 1146 (42S02): Table 'test.cmvotingrecord' doesn't exist mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | CmVotingRecord | +----------------+
可以看到我们创建 CmVotingRecord 表,MySQL 也是按照 CmVotingRecord 存储的,使用小写则无法操作该表。
lower_case_table_names = 1
:表不区分大小写,使用小写存储。
root@mysql 14:25: [rep_test]>create table CmVotingRecord( -> Id int auto_increment primary key , -> NameInfo varchar(20) -> ); Query OK, 0 rows affected (0.02 sec) root@mysql 14:25: [rep_test]>show tables; +--------------------+ | Tables_in_rep_test | +--------------------+ | cmvotingrecord | +--------------------+ 1 row in set (0.01 sec) root@mysql 14:25: [rep_test]>insert into CmVotingRecord value (1, '1'); Query OK, 1 row affected (0.00 sec) root@mysql 14:25: [rep_test]>insert into cmvotingrecord value (2, '1'); Query OK, 1 row affected (0.00 sec)
可以看到我们创建 CmVotingRecord 表,MySQL 则是按照 cmvotingrecord 小写存储的,使用 大写/小写 都可以操作该表。
lower_case_table_names = 2
:表不区分大小写,按照用户指定存储。
mysql> select @@lower_case_table_names; +--------------------------+ | @@lower_case_table_names | +--------------------------+ | 2 | +--------------------------+ 1 row in set (0.00 sec) mysql> create table CmVotingRecord( -> Id int auto_increment primary key , -> NameInfo varchar(20) -> ); Query OK, 0 rows affected (0.01 sec) mysql> show tables; +------------------+ | Tables_in_test02 | +------------------+ | CmVotingRecord | +------------------+ 1 row in set (0.00 sec) mysql> mysql> insert into CmVotingRecord value (1, '1'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into cmvotingrecord value (2, '1'); Query OK, 1 row affected (0.00 sec)
可以看到我们创建 CmVotingRecord 表,MySQL 是按照 CmVotingRecord 用户指定大小存储的,使用 大写/小写 都可以操作该表。
在不同系统上运行,会有不同的默认值
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/449321
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。