中数据库与表名是忽略大小写的betway体育app:,

在MySQL此中,有希望蒙受表名大小写敏感的难点。其实那些跟平台(操作系统)有关,也跟系统变量lower_case_table_names有涉及。下面总结一下,风野趣能够查阅官方文书档案“Identifier Case Sensitivity”

那就表示数据库和表名在 Windows 中是高低写不敏感的,而在大部档案的次序的 Unix 系统中是深浅写敏感的。一个特例是 Mac OS X,当缺省的 HFS+ 文件系统使用时。不过 Mac OS X 还协理 UFS 卷,那多少个在 Mac OS X 是高低写敏感的就疑似他们在任风流倜傥 Unix 上相仿。查看章节 1.8.3 MySQL 对 ANSI SQL92 的强大。
小心:纵然在 Windows 中数据库与表名是忽略大小写的,你不该在同三个查询中接受差别的分寸写来援引贰个加以的数据库和表。上面包车型地铁查询将无法源办公室事,因为它以 my_table 和 MY_TABLE 引用叁个表:

mysql的表的抑扬顿挫写区分

在linux的条件下,在mysql的配备里会对大小写有一定的渴求的。特别是部分云平台提供的一贯情况是布局好这几个必要,所以必要对那个有分明的刺探。(举个例子Ali云就可以设定lower_case_table_names=1,具体深入分析在前面)

 

 

1 简介
    在MySQL中,数据库对应数据目录中的目录。数据库中的各样表起码对应数据库目录中的一个文件(也或然是七个,决定于存储引擎卡塔尔(英语:State of Qatar)。由此,所运用操作系统的尺寸写敏感性决定了数量库名和表名的深浅写敏感性。
    在大大多Unix中数量库名和表名对大小写敏感,而在Windows中对大小写不灵动。贰个明明的例外情形是Mac OS X,它基于Unix但利用私下认可文件系统类型(HFS+卡塔尔,对大小写不灵动。然则,Mac OS X也协助UFS卷,该卷对大小写敏感,就好像Unix雷同。
    变量lower_case_file_system证实是或不是数据目录所在的文件系统对文本名的尺寸写敏感。ON表达对文本名的轻重写不灵敏,OFF表示敏感。
    例如在windows下查看:
betway体育app 1

复制代码 代码如下:

1、表名大小写

Linux暗中同意情形下分别轻重缓急写(其余,MySQL在Windows下多少库名、表名、列名、小名都不区分朗朗上口写,尽管设置lower_case_table_names=0,在询问时依然不会区分朗朗上口写。只是在导入导出时会对大小写有不同。原因是大大小小写的效应是在操作系统的文件系统对大小对界其余底子上贯彻的。WINDOWS的文件系统查询时不区分文件大小写。卡塔尔(英语:State of Qatar)

In MySQL, databases correspond to directories within the data directory. Each table within a database corresponds to at least one file within the database directory (and possibly more, depending on the storage engine). Triggers also correspond to files. Consequently, the case sensitivity of the underlying operating system plays a part in the case sensitivity of database, table, and trigger names. This means such names are not case-sensitive in Windows, but are case-sensitive in most varieties of Unix. One notable exception is macOS, which is Unix-based but uses a default file system type (HFS+) that is not case-sensitive. However, macOS also supports UFS volumes, which are case-sensitive just as on any Unix. See Section 1.8.1, “MySQL Extensions to Standard SQL”. Thelower_case_table_names system variable also affects how the server handles identifier case sensitivity, as described later in this section.

    表明windows系统对大小写不灵敏,mysql也暗中同意设置为对大小写不敏感。

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

(1)变量含义解释

lower_case_file_system:数据库所在的文件系统对文件名大小写敏感度。
ON代表大小写不敏感 OFF表示敏感

lower_case_table_names:表名大小写敏感度
0代表使用Create语句钦赐的高低写保存文件
1代表大小写敏感,文件系统以小写保存
2意味着使用Create语句钦赐的分寸写保存文件,但MySQL会将之转变为题写
(当Linux设置为2时,错误日志显示[Warning]
lower_case_table_names was set to 2, even though your the file system '/home/mysql/master_a/data/' is case sensitive.
Now setting lower_case_table_names to 0 to avoid future problems.)

 

2 大小写区分准则
    linux下:

    数据库名与表名是严酷不相同轻重缓急写的;
    表的别名是严格不一致朗朗上口写的;
    列名与列的外号在全数的情况下均是忽略大小写的;
    变量名也是从严区分轻重缓急写的;
    windows下:
    都不区分朗朗上口写
    Mac OS下(非UFS卷):
    都不区分抑扬顿挫写

列名与列的别称在富有的图景下均是忽略大小写的。
表的外号是分别朗朗上口写的。下边包车型地铁询问将不能够工作,因为它用 a 和 A 援引别称:
mysql> SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2;
少年老成经回忆数据库和表名的假名大小写有困难,提议选拔四个大器晚成致后生可畏预订,举个例子总是以小写字母创立数据库和表。
防止那一个主题素材的另一个艺术就是以 -O lower_case_table_names=1 参数运转mysqld。缺省级地区级在 Windows 中那个选项为 1 ,在 Unix 中为 0。
如果 lower_case_table_names 为 1 ,MySQL 将要积累与追寻时将全数的表名转变为小写字线。(从 MySQL 4.0.2 最早,那几个选项雷同适用于数据库名。卡塔尔(英语:State of Qatar)注意,当你改换那个选项时,你必得在起步 mysqld 前率先将老的表名调换为小写字母。
$ pwd
/data1/etl/aiinsight/ScheduleServer/mysql/support-files
$ ./mysql.server stop
$ pwd
/data1/etl/aiinsight/ScheduleServer/mysql/bin
./mysqld_safe --lower_case_table_names
方式2:校订my.cnf配置文件
在[mysqld]节下插手
lower_case_table_names=1

(2)变量更新

mysql> show variables like 'lower%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 0 |
+------------------------+-------+
2 rows in set (0.01 sec)

--改良开掘变量为只读变量
mysql> set global lower_case_table_names=1;
ERROR 1238 (HY000): Variable 'lower_case_table_names' is a read only variable

修正my.cnf后重启数据库

lower_case_table_names=1

mysql> show variables like 'lower%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
+------------------------+-------+
2 rows in set (0.01 sec)

因为校勘了配备lower_case_table_names=1,原本在mysql的show tables里面有表的记录, select操作时会展现查不到表

+--------------------------------+
| Tables_in_testdb |
+--------------------------------+
| TABLE1|
| TABLE2|

但是
mysql> select * from TABLE1;
ERROR 1146 (42S02): Table 'testdb.TABLE1' doesn't exist
注重原因是大小写敏感以至文件系统以小写文件名写入,而原先的表名是大写的。

在 MySQL 中, 数据库对应于数据目录中的目录。数据库中的每种表对应于数据库目录中起码二个文书 (或者越来越多, 具体决计于存款和储蓄引擎卡塔尔(قطر‎。触发器也对应于文件。由此, 底层操作系统的分歧朗朗上口写在数据库、表和触发器名称的朗朗上口写敏感度方面起珍视大职能。那象征这几个名称在 Windows 中不区分轻重缓急写, 但在多数类别的 Unix 中都是分别朗朗上口写的。一个眼看的差异是 macOS, 它是依据 Unix 的, 但使用的是不区分朗朗上口写的暗许文件系统类型 (HFS+卡塔尔(قطر‎。可是, macOS 还帮助 UFS 卷, 它们与其余 Unix 同样都以分别轻重缓急写的。参见1.8.1 节, "MySQL Extensions to Standard SQL"。lower_case_table_names 系统变量还影响服务器管理标记符大小写灵敏度的秘技, 如本节背后所述。

3 参数表明(lower_case_table_names)
    unix下lower_case_table_names暗许值为 0 .Windows下私下认可值是 1 .Mac OS X下私下认可值是 2 .

Windows 中是深浅写不灵敏的,而在大多数类其他 Unix 系统中是大小写敏感的。一个特例是 Mac OS X,当缺省的 HFS...

2、表字段数据大小写

表字段数据的查对,bin与cs区分大小写,ci不区分大小写
MySQL对核查约定的命名方式如下:
*_ci:case insensitive collation,不区分朗朗上口写
*_cs:case sensitive collation,区分轻重缓急写
*_bin: 表示的是binary case sensitive collation,将字符串各种字符串用二进制数据编译存款和储蓄。 区分朗朗上口写,並且能够存二进制的故事情节

 

 

(1)表字段数据区分轻重缓急写

内定核对为不同朗朗上口写

mysql> create table b(id varchar(10)) default charset=utf8 default collate=utf8_bin;
Query OK, 0 rows affected (0.03 sec)sec)
mysql> insert into b values ('A'),('a'),('B');
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from b where id like 'a';
+------+
| id |
+------+
| a |
+------+
1 row in set (0.00 sec)


mysql> select id,count(*) from b group by id;
+------+----------+
| id | count(*) |
+------+----------+
| A | 1 |
| B | 1 |
| a | 1 |
+------+----------+
3 rows in set (0.03 sec)

 Linux系统:

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

(2)表字段数据不区分轻重缓急写

内定核对为忽视大小写

mysql> create table t (name varchar(10)) default charset=utf8 default collate=utf8_general_ci;
Query OK, 0 rows affected (0.09 sec)

mysql> insert into t values('a'),('A'),('B'),('b'),('c');
Query OK, 5 rows affected (0.02 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> select * from t where name like 'a';
+------+
| name |
+------+
| a |
| A |
+------+
2 rows in set (0.01 sec)

mysql> select name,count(*) from t group by name;
+------+----------+
| name | count(*) |
+------+----------+
| a | 2 |
| B | 2 |
| c | 1 |
+------+----------+
3 rows in set (0.04 sec)

只是如若字段类型是binary则必定会有别抑扬顿挫写

mysql> alter table t change name name varchar(10) binary;
Query OK, 5 rows affected (0.08 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> select * from t where name like 'A';
+------+
| name |
+------+
| A |
+------+
1 row in set (0.00 sec)

mysql> select name,count(*) from t group by name;
+------+----------+
| name | count(*) |
+------+----------+
| A | 1 |
| B | 1 |
| a | 1 |
| b | 1 |
| c | 1 |
+------+----------+
5 rows in set (0.01 sec)

 

在linux的条件下,在mysql的安顿里会对大小写有一定的要求的。尤其是有个别云平台提供的定点景况是安插好这个要求,...

 

4 由大小写敏感转变为不敏感方法
    借使原先所树立库及表都是对大小写敏感的,想要变换为对大小写不灵动,首要必要进行如下3步:
    1.将数据库数据通过mysqldump导出。
    2.在my.cnf中更改lower_case_tables_name = 1,并重启mysql数据库。
    3.将导出的多寡导入mysql数据库。

    数据库名与表名是严厉区分朗朗上口写的;

 

    表的外号是从严不一样轻重缓急写的;

5 注意事项
    为了制止大小写引发的主题素材,生龙活虎种推荐的命名法规是:在概念数据库、表、列的时候任何利用小写字母加下划线的章程,不使用别的大写字母
    在其余系统中能够行使lower_case_tables_name=1。使用该选用的不利之处是当使用SHOW TABLES或SHOW DATABASES时,看不有名字原本是用小写仍然小写。
    请小心在Unix中假若原先lower_case_tables_name = 0将lower_case_tables_name设置为1事情未发生前,重启mysqld在此以前,必得先将旧的多寡库名和表名转变为小写。

    列名与列的小名在装有的意况下均是忽略大小写的;

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

    变量名也是严格区分朗朗上口写的;

 

  Windows系统

 

    都不区分朗朗上口写

    Mac OS下(非UFS卷):

本文由必威发布于必威-数据,转载请注明出处:中数据库与表名是忽略大小写的betway体育app:,

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。