8

所以我们的目标环境是linux,默认让mysql区分大小写。我知道我们可以使用 lower_case_table_names 变量使我们的 linux 环境不区分大小写,但我们宁愿不这样做。我们有几次被大小写不匹配所困扰,因为我们的开发平台是 OSX,而​​ mysql 在那里不区分大小写。

有没有一种方法可以强制表名在我的 OSX 安装的 MySql(5.0.83,如果这很重要)上区分大小写,以便在部署到在 linux 上运行的集成服务器之前捕获表名大小写不匹配?

4

2 回答 2

2

设置lower_case_table_names=0my.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)

于 2015-07-11T23:54:50.750 回答
-1

最好的办法是修复你的表名,这样就不会有任何冲突。仅按大小写区分是一个坏主意,并且会导致混淆(您可能知道)。

但尝试在创建过程中在表名周围使用单引号。这适用于在 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 上。”

于 2011-02-08T15:46:39.227 回答