我可以在不区分大小写的文件系统上强制MySql表名称区分大小写

时间:2010-04-28 15:58:48

标签: mysql case-sensitive

所以我们的目标环境是linux,默认情况下使mysql区分大小写。我知道我们可以使用lower_case_table_names变量使我们的linux环境不区分大小写,但我们宁愿不这样做。我们有几次因案例不匹配而被咬,因为我们的开发工具是OSX,而​​mysql在那里并不区分大小写。

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

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:-1)

这里最好的办法是修复你的表名,这样就不存在任何冲突。仅仅通过案例区分是一个坏主意,并导致混淆(你可能知道)。

但是在创建过程中尝试在表名周围使用单引号。这适用于SUSE / Linux / MySQL 5.0,在Windows上运行查询浏览器。

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上运行,它应该会失败。

结帐this link “一个值得注意的例外是Mac OS X,它是基于Unix的,但使用的是一个不区分大小写的默认文件系统类型(HFS +)。但是,Mac OS X也支持UFS卷,它在任何Unix上都是区分大小写的。 “