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)将表结构和表数据导入。
按照上面的步骤操作之后,再次查询数据表,表名就不区分大小写了。

【总结】

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


你可能感兴趣的:(【知识学习】,【数据库】)