【问题标题】:Can I force MySql table name case sensitivity on file systems that aren't case sensitive我可以在不区分大小写的文件系统上强制 MySql 表名区分大小写吗
【发布时间】:2010-04-28 15:58:48
【问题描述】:

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

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

【问题讨论】:

标签: mysql case-sensitive


【解决方案1】:

my.cnf 中设置lower_case_table_names=0

如果你是通过自制软件安装的,文件在这里: /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)

【讨论】:

  • 这似乎应该可以工作,但它不适用于 mysql@5.7 和 MacOS Mojave 10.14.4。
【解决方案2】:

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

但在创建过程中尝试在表名周围使用单引号。这适用于 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 一样区分大小写。 "

【讨论】:

  • 我们的表名不冲突。但有时我们的代码会将表名大写错误,而默认 OS X 文件系统不区分大小写的特性意味着我们在部署到 linux 之前不会看到该错误。
猜你喜欢
  • 2014-11-08
  • 1970-01-01
  • 2012-03-24
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 2011-09-09
相关资源
最近更新 更多