Linux mysql 区分大小写

Linux mysql 区分大小写

MySQL 中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件( 也可能是多个,取决于存储引擎) 。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。这说明在大多数Unix 中数据库名和表名对大小写敏感,而在Windows 中对大小写不敏感。一个显著的例外情况是Mac OS X ,它基于Unix 但使用默认文件系统类型(HFS+) ,对大小写不敏感。然而,Mac OS X 也支持UFS 卷,该卷对大小写敏感,就像Unix 一样。参见1.8.4节,“MySQL对标准SQL的扩展”

注释: 尽管在某些平台中数据库名和表名对大小写不敏感,不应在同一查询中使用不同的大小写来引用给定的数据库或表。下面的查询不会工作,因为它同时引用了表my_tablesas MY_tables

mysql> 

SELECT * FROM my_table WHERE MY_TABLE.col=1;





列、索引、存储子程序和触发器名在任何平台上对大小写不敏感,列的别名也不敏感。

默认情况,表别名在Unix 中对大小写敏感,但在WindowsMac OS X 中对大小写不敏感。下面的查询在Unix 中不会工作,因为它同时引用了别名aA

mysql> 

SELECT col_name

 FROM tbl_name

 AS a




    -> 

WHERE a.col_name

 = 1 OR A.col_name

 = 2;





然而,该查询在Windows 中是可以的。要想避免出现差别,最好采用一致的转换,例如总是用小写创建并引用数据库名和表名。在大多数移植和使用中建议使用该转换。

MySQL 中如何在硬盘上保存和使用表名和数据库名由lower_case_tables_name 系统变量确定,可以在启动mysqld 时设置。lower_case_tables_name 可以采用下面的任一值:

含义

0

使用CREATE TABLECREATE DATABASE 语句指定的大写和小写在硬盘上保存表名和数据库名。名称比较对大小写敏感。在Unix 系统中的默认设置即如此。请注意如果在大小写不敏感的文件系统上用--lower-case-table-names=0 强制设为0 ,并且使用不同的大小写访问MyISAM 表名,会导致索引破坏。

1

表名在硬盘上以小写保存,名称比较对大小写敏感。MySQL 将所有表名转换为小写以便存储和查找。该行为也适合数据库名和表的别名。该值为WindowsMac OS X 系统中的默认值。

2

表名和数据库名在硬盘上使用CREATE TABLECREATE DATABASE 语句指定的大小写进行保存,但MySQL 将它们转换为小写以便查找。名称比较对大小写敏感。 释: 在对大小写不敏感的文件系统上适用! InnoDB 表名以小写保存,例如lower_case_tables_name=1

WindowsMac OS X 中,lower_case_tables_name 的 默认值是1

如果只在一个平台上使用MySQL ,通常不需要更改lower_case_tables_name 变量。然而,如果你想要在对大小写敏感不同的文件系统的平台之间转移表,会遇到困难。例如,在Unix 中,my_tablesMY_tables 是两个不同的表,但在Windows 中,这两个表名相同。要想避免由于数据库或表名的大小写造成的数据转移问题,可使用两个选项:

·         在任何系统中可以使用lower_case_tables_name=1 。使用该选项的不利之处是当使用SHOW TABLESSHOW DATABASES 时,看不出名字原来是用大写还是小写。

·         Unix 中使用lower_case_tables_name=0 ,在Windows 中使用lower_case_tables_name=2 。这样了可以保留数据库名和表名的大小写。不利之处是必须确保在Windows 中查询总是用正确大小写引用数据库名和表名。如果将查询转移到Unix 中,由于在Unix 中大小写很重要,如果大小写不正确,它们不工作。

例外 :如果你正使用InnoDB 表,在任何平台上均应将lower_case_tables_name 设置为1 ,以强制将名转换为小写。

请注意在Unix 中将lower_case_tables_name 设置为1 之前,重启mysqld 之前,必须先将旧的数据库名和表名转换为小写

猜你喜欢

转载自shikonglaike.iteye.com/blog/1667332