首页 文章

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

提问于
浏览
7

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

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

2 回答

  • 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)

  • -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 "One notable exception is Mac OS X, which is Unix-based but uses a default file system type (HFS+) that is not case sensitive. However, Mac OS X also supports UFS volumes, which are case sensitive just as on any Unix."

相关问题