在MySQL中,数据库和表都是对应目录下的一个或多个文件。因此,操作系统的大小写是否敏感决定了数据库大小写是否敏感。而在Windows中是对大小写不敏感的(Linux是对大小写敏感的)。
在linux的mysql中,输入1
show variables like "lower%";
可以看到1
2
3
4
5
6+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 0 |
+------------------------+-------+
lower_case_table_names参数说明
当值为0时
使用CREATE TABLE或CREATE DATABASE语句制定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。在大小写不敏感的操作系统如windows
或Max OS x上我们不能将参数设为0,如果再大小写不敏感的文件系统上将“lower_case_table_names”强制设置为0,并使用不同的大小写访问MyISAM表名,可能会导
致索引破坏。
当值为1时
表名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名转换为小写存储和查找表上。该行为也适合数据库名和表的别名,该值为Windows的默认值。
当值为2时
表名和数据库名在硬盘上使用CREATETABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注意:只在对大小写不敏感的文件系统上适用!innodb表名用小写保存。
在MySql上为了避免大小写问题引来的不必要的麻烦,建议都将“lower_case_tables_name”设置值为1。我们可以用其他的方式来命名。
修改配置
修改/etc/mysql/my.cnf,在[mysqld]下面加入1
lower_case_table_names=1
使用service mysql restart重启服务。
这时候进入mysql,输入1
show variables like "lower%";
可以看到1
2
3
4
5
6+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
+------------------------+-------+