赞
踩
项目在本地跑的时候没问题,但是部署在Linux后,就报错找不到相关数据表,但是查看数据库后发现明明存在,这是因为大小写问题。Linux对大小写是敏感的,尤其在开发quartz模块的时候,quartz内部查询数据的语句是大写的,如QRTZ_LOCKS、QRTZ_TRIGGERS等这些内部表。
解决方案:其实很简单,让它对大小写不敏感即可,即在Linux上的MySQL的配置文件/etc/my.cnf中加入一行代码:
lower_case_table_names=1。my.cnf文件在下方会给完整代码。
注意事项:
虽然简单,但是有一些需要注意的地方:
1.lower_case_table_names参数详解:
其中 0:区分大小写,1:不区分大小写
MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;
MySQL在Windows下都不区分大小写。
如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种:
A、创建时设置:
CREATE TABLE T(
A VARCHAR(10) BINARY
);
B、使用alter修改:
ALTER TABLE`tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
C、mysql tableeditor中直接勾选BINARY项。
2.修改完配置之后,一定要重启数据库:
service mysqld restart
3.再次查询数据表,这时发现不管查询SQL语句中的表名是大写还是小写都提示找不到此表了。
原因是修改配置之后,会导致原来的大写的表名无法识别,这一点要特别注意。
解决办法是:
(1)在修改配置之前一定先将所有表的表结构和表数据导出做备份;
(2)删除原来的表;
(3)修改配置;
(4)将表结构和表数据导入。
按照上面的步骤操作之后,再次查询数据表,表名就不区分大小写了。
配置完整版代码:my.cnf
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。