所以我们的目标环境是linux,默认让mysql区分大小写。我知道我们可以使用 lower_case_table_names 变量使我们的 linux 环境不区分大小写,但我们宁愿不这样做。我们有几次被大小写不匹配所困扰,因为我们的开发平台是 OSX,而 mysql 在那里不区分大小写。
有没有一种方法可以强制表名在我的 OSX 安装的 MySql(5.0.83,如果这很重要)上区分大小写,以便在部署到在 linux 上运行的集成服务器之前捕获表名大小写不匹配?
所以我们的目标环境是linux,默认让mysql区分大小写。我知道我们可以使用 lower_case_table_names 变量使我们的 linux 环境不区分大小写,但我们宁愿不这样做。我们有几次被大小写不匹配所困扰,因为我们的开发平台是 OSX,而 mysql 在那里不区分大小写。
有没有一种方法可以强制表名在我的 OSX 安装的 MySql(5.0.83,如果这很重要)上区分大小写,以便在部署到在 linux 上运行的集成服务器之前捕获表名大小写不匹配?
设置lower_case_table_names=0
在my.cnf
.
如果你是通过自制软件安装的,文件在这里:
/usr/local/Cellar/mysql/<version>/my.cnf
带有表的查询现在应该区分大小写:
mysql> select count(*) from user;
ERROR 1146 (42S02): Table 'xxx.user' doesn't exist
mysql> select count(*) from User;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
最好的办法是修复你的表名,这样就不会有任何冲突。仅按大小写区分是一个坏主意,并且会导致混淆(您可能知道)。
但尝试在创建过程中在表名周围使用单引号。这适用于在 Windows 上运行查询浏览器的 SUSE/Linux/MySQL 5.0。
CREATE TABLE `MySchema`.`test` (
`COMMENT` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `MySchema`.`Test` (
`COMMENT` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into MySchema.test values ('this is table test' );
insert into MySchema.Test values ('this is table Test' );
select * from MySchema.test;
select * from MySchema.Test;
如果不区分大小写的客户端请求使用错误大小写的表,您是否希望它失败?我相信如果 MySQL 数据库在 Linux 上运行它应该会失败。
查看此链接 “一个值得注意的例外是 Mac OS X,它基于 Unix,但使用不区分大小写的默认文件系统类型 (HFS+)。但是,Mac OS X 也支持 UFS 卷,它是区分大小写的,就像在任何 Unix 上。”