MySQL中Identifier Case Sensitivity

 
 
都不区分大小写

 

    说明windows系统对大小写不敏感,mysql也默认设置为对大小写不敏感。

 

3
参数说明(lower_case_table_names)

    unix下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac
OS X下默认值是 2 .

在配置文件my.cnf中设置lower_case_table_names=1后(1表示不区分大小写,0表示区分大小写),重启MySQL服务后,进行如下测试:

 

 

2
大小写区分规则
    linux下:

    数据库名与表名是严格区分大小写的;
    表的别名是严格区分大小写的;
    列名与列的别名在所有的情况下均是忽略大小写的;
    变量名也是严格区分大小写的;
    windows下:
    都不区分大小写
    Mac OS下(非UFS卷):
    都不区分大小写

 Linux系统:

5
注意事项

   
为了避免大小写引发的问题,一种推荐的命名规则是:在定义数据库、表、列的时候全部采用小写字母加下划线的方式,不使用任何大写字母
   
在任何系统中可以使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW
TABLES或SHOW DATABASES时,看不出名字原来是用大写还是小写。
    请注意在Unix中如果以前lower_case_tables_name =
0将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将旧的数据库名和表名转换为小写。

2.
设置成1:表名转小写后存储到硬盘,比较时大小写不敏感。 

****************************************************************************************
   
原文地址:
    博客主页:
****************************************************************************************

 
 
列名与列的别名在所有的情况下均是忽略大小写的;

 

 

1 简介
   
在MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。
   
在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。一个显著的例外情况是Mac
OS X,它基于Unix但使用默认文件系统类型(HFS+),对大小写不敏感。然而,Mac
OS X也支持UFS卷,该卷对大小写敏感,就像Unix一样。
   
变量lower_case_file_system说明是否数据目录所在的文件系统对文件名的大小写敏感。ON说明对文件名的大小写不敏感,OFF表示敏感。
    例如在windows下查看:
图片 1

 

4
由大小写敏感转换为不敏感方法

   
如果原来所建立库及表都是对大小写敏感的,想要转换为对大小写不敏感,主要需要进行如下3步:
    1.将数据库数据通过mysqldump导出。
    2.在my.cnf中更改lower_case_tables_name = 1,并重启mysql数据库。
    3.将导出的数据导入mysql数据库。

关于数据库名大小写敏感,会遇到下面问题:

                            参数值                         解释
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表名用小写保存。

 

 

 

1.
设置成0:表名按你写的SQL大小写存储,大写就大写小写就小写,比较时大小写敏感。 

 
 
Mac OS下(非UFS卷):

 

 
Windows系统

 

 

注意事项:列名、索引、存储过程、事件名称在任何平台上都不区分大小写,列别名也不区分大小写。

 

mysql> show variables like 'lower_case_table_names';

+------------------------+-------+

| Variable_name          | Value |

+------------------------+-------+

| lower_case_table_names | 1     |

+------------------------+-------+

1 row in set (0.01 sec)

 

mysql> 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| MyDB               |

| mysql              |

| performance_schema |

| tmonitor           |

| xiangrun           |

+--------------------+

6 rows in set (0.01 sec)

 

mysql> use MyDB;

ERROR 1049 (42000): Unknown database 'mydb'

mysql> 

参考资料:

3.
设置成2:表名按你写的SQL大小写存储,大写就大写小写就小写,比较时统一转小写比较。

 

mysqldump:
Got error: 1066: Not unique table/alias: ‘test’ when using LOCK
TABLES

 

 

 

Value

Meaning

0

Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASEstatement. Name comparisons are case sensitive. You should not set this variable to 0 if you are running MySQL on a system that has case-insensitive file names (such as Windows or macOS). If you force this variable to 0 with –lower-case-table-names=0 on a case-insensitive file system and access MyISAM tablenames using different lettercases, index corruption may result.

1

Table names are stored in lowercase on disk and name comparisons are not case-sensitive. MySQL converts all table names to lowercase on storage and lookup. This behavior also applies to database names and table aliases.

2

Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASEstatement, but MySQL converts them to lowercase on lookup. Name comparisons are not case sensitive. This works only on file systems that are not case-sensitive! InnoDB table names and view names are stored in lowercase, as forlower_case_table_names=1.

图片 2

1:ERROR
1010 (HY000): Error dropping database (can’t rmdir ‘./xxxx’, errno:
39)

发表评论

电子邮件地址不会被公开。 必填项已用*标注