linux下Mysq表名的大小写问题解析

这些天把项目都转移到新的Linux服务器上来,发现老是报没法找到表的错误。html

ssh进去mysql下:mysql

而后发现卧槽有啊。。。linux

回来发现输出信息均为未找到“T_USER”大写字样。回来想多是用mybatis写的原生SQL语句致使的。sql

因此查阅了资料发现:http://www.ahlinux.com/mysql/11302.html 数据库

更改linux下的mysql读取表的方式应该能够行得通。服务器

因此按照文章进入my.cnf中去更改。
mybatis

更改后发现问题解决了。ssh

在linux系统中,mysql数据库的库名、表名、列名、别名大小写规则:
  一、数据库名与表名是严格区分大小写的;
  二、表的别名是严格区分大小写的;
  三、列名与列的别名在全部的状况下均是忽略大小写的;
  四、变量名也是严格区分大小写的;
 
MySQL在Windows下都不区分大小写。spa

所以,在不一样操做系统中为了能使程序和数据库都能正常运行,最好的办法是在设计的时候都转为小写,可是若是在设计的时候已经规范化大小写了,那么在Windows环境下只要对数据库的配置作下改动就好了,具体操做以下:操作系统

在MySQL的配置文件中my.ini [mysqld] 中增长一行
  lower_case_table_names = 1
  参数解释:
  0:区分大小写
  1:不区分大小写
在 MySQL 中,数据库和表对就于那些目录下的目录和文件。于是,操做系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。

奇怪的是列名与列的别名在全部的状况下均是忽略大小写的,而表的别名又是区分大小写的。

要避免这个问题,你最好在定义数据库命名规则的时候就所有采用小写字母加下划线的组合,而不使用任何的大写字母。

或也能够强制以 -O lower_case_table_names=1 参数启动 mysqld(若是使用 --defaults-file=...\my.cnf 参数来读取指定的配置文件启动 mysqld 的话,你须要在配置文件的 [mysqld] 区段下增长一行 lower_case_table_names=1)。

这样MySQL 将在建立与查找时将全部的表名自动转换为小写字符(这个选项缺省地在 Windows 中为 1 ,在 Unix 中为 0。从 MySQL 4.0.2 开始,这个选项一样适用于数据库名)。

当更改这个选项时,必须在启动 mysqld 前首先将老的表名转换为小写字母。

即若是但愿在数据库里面建立表的时候保留大小写字符状态,则应该把这个参数置0: lower_case_table_names=1 。
不然,一样的sqldump脚本在不一样的操做系统下最终导入的结果不同(在Windows下全部的大写字符都变成小写了)。
 
问题:
在LINUX下调一个程序总提示找不到表,明明是建了表的,在MYSQL的命令行下也能够查到,为何程序就找不到表呢?

原来是LINUX下的MYSQL默认是要区分表名大小写。

让MYSQL不区分表名大小写的方法:
1,用ROOT登陆,修改/etc/my.cnf
2,在[mysqld]下加入一行:lower_case_table_names=1
3,重启mysql数据库,使配置生效:service mysqld restart

相关文章
相关标签/搜索