http://blog.csdn.net/jesseyoung/article/details/40617031mysql
1 简介
在MySQL中,数据库对应数据目录中的目录。数据库中的每一个表至少对应数据库目录中的一个文件(也多是多个,取决于存储引擎)。所以,所使用操做系统的大小写敏感性决定了数据库名和表名的大小写敏感性。
在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。一个显著的例外状况是Mac OS X,它基于Unix但使用默认文件系统类型(HFS+),对大小写不敏感。然而,Mac OS X也支持UFS卷,该卷对大小写敏感,就像Unix同样。
变量lower_case_file_system说明是否数据目录所在的文件系统对文件名的大小写敏感。ON说明对文件名的大小写不敏感,OFF表示敏感。
例如在windows下查看:
linux
说明windows系统对大小写不敏感,mysql也默认设置为对大小写不敏感。sql
2 大小写区分规则
linux下:
数据库名与表名是严格区分大小写的;
表的别名是严格区分大小写的;
列名与列的别名在全部的状况下均是忽略大小写的;
变量名也是严格区分大小写的;
windows下:
都不区分大小写
Mac OS下(非UFS卷):
都不区分大小写数据库
3 参数说明(lower_case_table_names)
unix下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2 .windows
参数值 | 解释 |
0 | 使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。在大小写不敏感的操做系统如windows或Mac OS x上咱们不能将该参数设为0,若是在大小写不敏感的文件系统上将--lowercase-table-names强制设为0,而且使用不一样的大小写访问MyISAM表名,可能会致使索引破坏。 |
1 | 表名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将全部表名转换为小写在存储和查找表上。该行为也适合数据库名和表的别名。该值为Windows的默认值。 |
2 | 表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注释:只在对大小写不敏感的文件系统上适用! innodb表名用小写保存。 |
4 由大小写敏感转换为不敏感方法
若是原来所创建库及表都是对大小写敏感的,想要转换为对大小写不敏感,主要须要进行以下3步:
1.将数据库数据经过mysqldump导出。
2.在my.cnf中更改lower_case_tables_name = 1,并重启mysql数据库。
3.将导出的数据导入mysql数据库。spa
5 注意事项
为了不大小写引起的问题,一种推荐的命名规则是:在定义数据库、表、列的时候所有采用小写字母加下划线的方式,不使用任何大写字母
在任何系统中可使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW TABLES或SHOW DATABASES时,看不出名字原来是用大写仍是小写。
请注意在Unix中若是之前lower_case_tables_name = 0将lower_case_tables_name设置为1以前,重启mysqld以前,必须先将旧的数据库名和表名转换为小写。操作系统