Mysql 大小写问题

今天发布程序的时候,日志报错找不到表,但是系统中已经存在表,最后发现是sql大小写的问题,mysql默认设置导致这些执行失败。

  1.用ROOT登录,修改/etc/my.cnf

  2.在[mysqld]下加入一行:lower_case_table_names=1

  3.重新启动数据库即可

就需要设置忽略大小写。设置lower-case-table-names=1,重启mysql实例生效。 这时就产生了另外一个问题,之前的大写字母的数据库名都失效了。都提示找不到数据库名。注释掉个lower-case-table-names=1. 则没有这个问题,因此这个问题肯定是lower-case-table-names参数引起的。故查找了官方解释:

Mysql官方文档的介绍:


Value


Meaning


0


Table and database names are stored on disk using the lettercase  specified in the CREATE TABLE orCREATE DATABASE statement.  Name comparisons are case sensitive. You should not set  this variable to 0 if you are running MySQL on a system that has  case-insensitive file names (such as Windows or Mac OS X). If you force this  variable to 0 with --lower-case-table-names=0 on  a case-insensitive file system and access MyISAM tablenames using different lettercases, index corruption  may result.


1


Table names are stored in lowercase on disk and name comparisons  are not case sensitive. MySQL converts all table names to lowercase on  storage and lookup. This behavior also applies to database names and table  aliases.


2


Table and database names are stored on disk using the lettercase  specified in the CREATE TABLE orCREATE DATABASE statement,  but MySQL converts them to lowercase on lookup. Name comparisons are not case  sensitive. This works only on file systems that are not case sensitive! InnoDB table names are  stored in lowercase, as for lower_case_table_names=1.

默认为0,大小写敏感。

设置1,大小写不敏感。创建的表,数据库都是以小写形式存放在磁盘上,对于sql语句都是转换为小写对表和DB进行查找。

设置2,创建的表和DB依据语句上格式存放,凡是查找都是转换为小写进行。

If you plan to set the lower_case_table_names system variable to 1 on Unix, you must first convert your old database and table names to lowercase before stopping mysqld and restarting it with the new variable setting. To do this for an individual table, use RENAME TABLE:

当想设置lower_case_table_names = 1时,在重启数据库实例之前就需要将原来的数据库和表转换为小写。

官方文档的解释。要开启lower_case_table_names = 1 。先要将大写字母数据库更改为小写。否则将找不到数据库名。

所以要想忽略大小写,还需要提前将大写数据库名更改小写,否则报错。数据库名无法rename.可以新建一个小写的数据库名。 然后rename table 到新的数据库,完成表的迁移。
在进行数据库参数设置之前,需要掌握这个参数带来的影响,切不可盲目设置。

时间: 2025-01-04 04:48:29

Mysql 大小写问题的相关文章

mysql 大小写问题-sql-mode问题

一.mysql 字段名 表名 数据库名 是否区分大小写 今天碰到数据库大小写问题,linux与windows下问题 同时又碰到保留字 http://www.cnblogs.com/lawdong/archive/2010/08/08/2357903.html(别人收集的.大家可以看一下保留字有哪些) 以下为本人测试所得结论: Linux操作系统下 数据库 默认是区分大小写 表名 默认是区分大小写 字段名 默认是 不 区分大小写 Windows操作系统下 数据库不区分大小写 表名不区分大小写 字段

【转】MYSQL大小写问题

经常遇到的问题,一些不是特别重要但是又比较郁闷的事情.例如今天这个MySQL大小写敏感. 先上测试结果. Linux环境下,不是windows平台下.区别很大.注意. 一图胜千言 mysql> show create table Ac; +-------+-------------------------------------------------------------------------------------------------------------------------+

MySQL大小写问题

字段值的大小写由mysql的校对规则来控制.提到校对规则,就不得不说字符集.字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则  . 一般而言,校对规则以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)._cs(大小写敏感)或_bin(二元)结束 .比如 utf8字符集,utf8_general_ci,表示不区分大小写,这个是utf8字符集默认的校对规则:utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写 .

MySQL大小写补坑记

背景:由于项目开始时数据库设计经验不足,数据库名和部分数据表名都含有大写字母.但问题是,Linux上数据库名和表名是区分大小写的,而Windows上是不区分大小写的.结果就是在看本地的数据库的时候,对着写的代码是小写的表名,后来传到服务器上却发现报错,几经审查才发觉是表名的大小写不统一的问题.真是天坑啊,坑了自己也坑了小伙伴.怎么办呢?代码已经比较多了,不太可能一下子就把代码里面的表名都改过来.网上看到说设置 lower_case_table_names 可以使Linux上的数据库表名不区分大小

MYSQL大小写(由于数据由windows迁移到Linux导致)

今日从sqlserver上迁移了一个数据库到Linux的MySQL中,迁移成功了,但是应用却跑不通,查看日志发现,提示找不到表,我注意到,表名都是存在大小写的,而MySQL中的表名都是小写的.这提醒了我,莫非MySQL 中表名是大小写敏感的?一查果然如此.解决方案如下: 1.用ROOT登录,修改/etc/my.cnf 2.在[mysqld]下加入一行:lower_case_table_names=1 3.重新启动数据库即可 其中 lower_case_table_names=1 参数缺省地在 W

MySQL大小写问题的简单说明(关键字/函数/表名)(转)

MySQL语句中字母大小写规则随着语句元素的不同而变化,同时还要取决于MySQL服务器主机上的操作系统. SQL关键字与函数名 关键字和函数名不区分字母的大小写.如.abs.bin.now.version.floor等函数.SELECT.WHERE.ORDER.GROUP BY等关键字. 数据库.数据表和视图的名字 在服务器主机上,MySQL数据库和数据表用底层文件系统中的目录和文件表示.因此数据库和数据表名字的默认字母大小写情况取决于服务器主机上的操作系统在文件名方面的规定.Windows文件

mysql 大小写取消敏感设置

#mysqld --SET-lower_case_table_names=1; 或者在mysql server的配置文件中添加配置项: vi /etc/my.cnf lower_case_table_names=1 该变量值的详细定义如下: Value Meaning 0 Table and database names are stored on disk using the lettercase specified in the CREATE TABLE orCREATE DATABASE 

LINUX下mysql的大小写是否区分设置 转

一.Linux中MySQL大小写详情:1.数据库名严格区分大小写2.表名严格区分大小写的3.表的别名严格区分大小写4.变量名严格区分大小写5.列名在所有的情况下均忽略大小写6.列的别名在所有的情况下均忽略大小写 二.设置MySQL表名不区分大小写1.切换到root用户$ su - root 2.修改/etc/my.cof配置文件,# sed -i '/mysqld/a\lower_case_table_names=1' /etc/my.cnf lower_case_table_names参数详解

linux/centos下设置Mysql表名不区分大小写

情景:公司近期在将数据库从ORACLE转为MYSQL,由于之前在ORACLE中表名是不区分大小写,因此到mysql中就出现了找不到表的问题,经上网查询,发现在linux下mysql的表名是区分大小写的,但是有参数可以使其不区分大小写. 一.linux中mysql大小写详情: 1.数据库名严格区分大小写 2.表名严格区分大小写的 3.表的别名严格区分大小写 4.变量名严格区分大小写 5.列名在所有的情况下均忽略大小写 6.列的别名在所有的情况下均忽略大小写 二.添加参数使其不区分大小写 1.切换到