在使用MySQL建库的过程中发现了一个问题,无论怎么创建库,创建出来的库名都是小写的。然后上网查了一下资料。
在MySQL中,数据库和表都是对应目录下的一个或多个文件。因此,操作系统的大小写是否敏感决定了数据库大小写是否敏感。而在Windows中是对大小写不敏感的(Linux是对大小写敏感的)。
下图是在windows操作系统上MySQL中lower_case_table_system和lower_case_table_names的默认值。
下图是在Linux操作系统上MySQL中lower_case_table_system和lower_case_table_names的默认值。
变量lower_case_file_system说明是否数据目录所在的文件系统对文件名的大小写敏感。ON说明文件名的大小写不敏感,OFF表示敏感。
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表名用小写保存。
那么现在问题来了,如何将Linux操作系统上有大小写的数据库还原到Windows操作系统上?
1、 将数据库数据通过mysqldump导出
2、 在my.cnf或my.ini中更改lower_case_tables_name=1,并重启Mysql服务。
3、 将导出的数据导入MySQL数据库中。
在MySql上为了避免大小写问题引来的不必要的麻烦,建议都将“lower_case_tables_name”设置值为1。我们可以用其他的方式来命名。