在MySQL中,数据库对应操作系统数据目录中的目录,数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名以及表名的大小写敏感性。这说明在大多数Unix中数据库名和表名对大小写敏感,而在windows中对大小写不敏感。
列、索引、存储子程序和触发器名在任何平台对大小写不敏感,列的别名也不敏感。
对于类Unix系统:
-
数据库名和表名是严格区分大小写的
-
表的别名是严格区分大小写的
-
列名与列别名在所有情况下均是忽略大小写的
-
变量名也是严格区分大小写的
对于win系统:
-
全部不区分大小写
MySQL如何在硬盘上保存和使用表名和数据库名,是由lower_case_tables_name系统变量确定,可以在启动mysqld时设置。
-
If set to 0, table names are stored as specified and comparisons are case sensitive.
-
If set to 1, table names are stored in lowercase on disk and comparisons are not case sensitive.
-
If set to 2, table names are stored as given but compared in lowercase. This option also applies to database names and table aliases.
Unix平台上默认lower_case_tables_name=0
MySQL在查询或者字符串比较的时候,也是大小写不敏感的。可以指定 BINARY关键字以区分大小写。
如果只在一个平台上使用MySQL,通常不需要更改lower_case_tables_name 变量。然而,如果你想要在对大小写敏感不同的文件系统的平台之间转移表,会遇到问题。
命名规范
为了避免大小写引发的问题,一种推荐的命名规则是:在定义数据库/表/列的时候全部采用小写字母+下划线形式,不使用任何大写字母。
如果你使用InnoDB引擎,在任何平台上均应用lower_case_tables_name=1,以强制将名转换为小写。请注意在Unix系统中将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将原来的数据库名以及表名全部转换为小写。
本文出自 “Share your knowledge” 博客,请务必保留此出处http://skypegnu1.blog.51cto.com/8991766/1591571
修改方法:
本人使用的是mysql5.7.16
修改方法 是在
/etc/my.cnf 中的[mysqld]的下方增加 lower_case_tables_name=1
也有启动的时候增加参数的,
或者启动的时候加参数-O lower_case_table_names=1 来启动
看个人喜好
参考命令:
1、参数含义:
lower_case_table_names: 此参数不可以动态修改,必须重启数据库
lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names=2, 表名存储为给定的大小写但是比较的时候是小写的
2、修改 参数lower_case_table_names 产生的问题
mysql> show variables like 'lower_case_table_names';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 0 |
+------------------------+-------+
1 row in set (0.00 sec)
在mysql系统中原来的参数是lower_case_table_names=0 ,就是存储的时候区分大小写,创建了表Tt tT
mysql> create table Tt(id int);
Query OK, 0 rows affected (0.10 sec)
mysql> create table tT(id int);
Query OK, 0 rows affected (0.03 sec)
修改参数 /etc/my.cnf 中设置 lower_case_table_names = 1
mysql> show variables like 'lower_case_table_names';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+
1 row in set (0.00 sec)
官方说明:
Since version 4.02, MySQL on Windows converts table names to lower case automatically (ignoring the case of the table names in CREATE statements), because the variable lower_case_table_names is set to 1 by default. The following page of the manual discusses this setting with regard to cross-platform compatibility issues, and may be of some help:
http://dev.mysql.com/doc/refman/5.1/en/name-case-sensitivity.html
If you would like to use case sensitivity in your table names, you will need to set the system variable lower_case_table_names to 0 in my.ini or my.cnf by adding this line under [mysqld]
set-variable=lower_case_table_names=0
You can also achieve the same thing by starting mysql with --lower_case_table_names=0 as a startup parameter.
To see what the setting is currently on your system, execute SHOW VARIABLES LIKE 'lower_case_t%' from a mysql prompt.