0
点赞
收藏
分享

微信扫一扫

Linux下MySQL数据表名大小写


问题——提示数据表找不到

    最近项目中使用了集群版的quartz定时器,再加上部署环境重新部署,这个quartz的数据库没少出问题啊!说一个最尴尬的问题吧,项目一共部署了三套环境,开发,联调,测试,同样的代码以及环境配置,可是启动项目的时候一会儿提示找不到qrtz_locks一会儿提示找不到qrtz_LOCKS,quartz集群的表均有这个问题,然后根据提示修改表名项目就完美启动,你说尴不尴尬!!!

解决思路    

因为项目之前也部署过,在加上这样的问题,首先排除了项目本身的问题。就从数据库的表名开始着手解决。


     众所周知 windows本身是不区分大小写的,而Linux下却有严格的区分界限,刚好MySQL是部署到centos7上的,经过查询发现Linux对大小写是敏感的,尤其在开发quartz模块的时候,quartz内部查询数据的语句是大写的,如QRTZ_LOCKS、QRTZ_TRIGGERS等这些内部表。


解决方案:

把Linux上设置为对大小写不敏感不就行啦!但是如何判定当前的数据配置是否区分大小写呢?


使用show Variables like '%table_names'查看lower_case_table_names的值

lower_case_table_names参数详解:

      其中 0:区分大小写,1:不区分大小写

      MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

          1、数据库名与表名是严格区分大小写的;

          2、表的别名是严格区分大小写的;

          3、列名与列的别名在所有的情况下均是忽略大小写的;

          4、变量名也是严格区分大小写的;

      如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种:

          A、创建时设置:

         

CREATE TABLE T(
A VARCHAR(10) BINARY
);

          B、使用alter修改:

         

ALTER TABLE`tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;

          C、mysql tableeditor中直接勾选BINARY项。

 

MySQL在Windows下都不区分大小写。

1、 Linux上的MySQL默认是区分大小写,如果需要不对大小写敏感的话需要在Linux上的MySQL的配置文件/etc/my.cnf中加入一行代码:

lower_case_table_names=1

2、修改完配置之后,一定要重启数据库:

       service mysqld restart

3、再次查询数据表,这时发现不管查询SQL语句中的表名是大写还是小写都提示找不到此表了。

       原因是修改配置之后,会导致原来的大写的表名无法识别,这一点要特别注意。

       解决办法是:

        (1)在修改配置之前一定先将所有表的表结构和表数据导出做备份;

        (2)删除原来的表;

        (3)修改配置;

        (4)将表结构和表数据导入。

按照上面的步骤操作之后,再次查询数据表,表名就不区分大小写了。


【总结】

    遇到这种问题还是花费了半个小时候去解决!!!归根到底还是自己的知道内容太少啊!各个方面的知识都需要不断补充!继续努力吧!


举报

相关推荐

0 条评论