澳门新萄京:Mysql数据库名和表名在不同系统下的
分类:数据库

在MySQL此中,有希望遇见表名大小写敏感的主题素材。其实这些跟平台(操作系统卡塔 尔(英语:State of Qatar)有关,也跟系统变量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,具体分析在后边卡塔 尔(英语:State of Qatar)

 

教您怎么样在windows与linux系统中装置MySQL数据库名、表名大小写敏感,mysql数据库名

在 MySQL 中,数据库和表其实正是多少目录下的目录和文。

为此,操作系统的敏感性决定数据库和表命名的轻重写敏感。那就表示数据库和表名在 Windows 中是深浅写不灵敏的,而在大多数项指标 Unix/Linux 系统中是高低写敏感的。

MySQL大小写敏感能够透过陈设文件的lower_case_table_names参数来调整。

WINDOWS:

编排MySQL安装目录下的my.ini 文件,在[mysqld]节下 添加 lower_case_table_names=0 (备注:为0时大小写敏感,为1时高低写不灵敏,默感到1),能够兑现MySql根据建表Sql语句的大小写情状来定义表名。

LINUX:

编辑/etc/my.cnf文件,在[mysqld]节下 添加 lower_case_table_names 参数,并安装相应的值 (备注:为0时大小写敏感,为1时大小写不灵敏,默认为0)

 

1 简介
    在MySQL中,数据库对应数据目录中的目录。数据库中的每一个表最少对应数据库目录中的八个文书(也大概是多少个,决计于存款和储蓄引擎)。由此,所利用操作系统的高低写敏感性决定了数额库名和表名的大小写敏感性。
    在大超级多Unix中多少库名和表名对大小写敏感,而在Windows中对大小写不灵活。八个分明的例外景况是Mac OS X,它基于Unix但采纳默许文件系统类型(HFS ),对大小写不灵动。然则,Mac OS X也扶助UFS卷,该卷对大小写敏感,就像Unix同样。
    变量lower_case_file_system表明是否数据目录所在的文件系统对文本名的大大小小写敏感。ON表达对文件名的分寸写不灵活,OFF代表敏感。
    例如在windows下查看:
澳门新萄京 1

复制代码 代码如下:

1、表名大小写

Linux暗中认可情形下分别朗朗上口写(其它,MySQL在Windows下多少库名、表名、列名、小名都不区分朗朗上口写,固然设置lower_case_table_names=0,在询问时依然不会分别朗朗上口写。只是在导入导出时会对大小写有不一致。原因是大大小小写的成效是在操作系统的文件系统对大小对界其余底工上达成的。WINDOWS的文件系统查询时不区分文件大小写。)

linux中怎让mysql的表不区分sql语句的深浅写?

Windows 遭受下大小写不灵活

CREATE TABLE tab (
id INT AUTO_INCREMENT,
val VARCHAR(10),
PRIMARY KEY (id)
);

mysql> select * from tab;
Empty set (0.00 sec)

mysql> select * from Tab;
Empty set (0.00 sec)

mysql> select * from `Tab`;
Empty set (0.00 sec)

在MySQL中如何在硬盘上保存和使用表名和数据库名由lower_case_tables_name系统变量鲜明,能够在起步mysqld时设置。lower_case_tables_name能够选取上面包车型大巴任生机勃勃值:
值含义
0使用CREATE TABLE或CREATE DATABASE语句钦定的大写和题诗在硬盘上保留表名和数目库名。名称相比对大小写敏感。在Unix系统中的暗中认可设置即那样。请在意就算在尺寸写不灵敏的文件系统上用--lower-case-table-names=0强制设为0,何况动用分歧的尺寸写访谈MyISAM表名,会诱致索引破坏。
1表名在硬盘上以小写保存,名称比较对大小写敏感。MySQL将兼具表名调换为小写以便存款和储蓄和寻觅。该行为也适合数据库名和表的外号。该值为Windows和Mac OS X系统中的暗中认可值。
2表名和数目库名在硬盘上采用CREATE TABLE或CREATE DATABASE语句钦赐的深浅写举行保存,但MySQL将它们转换为小写以便查找。名称比较对大小写敏感。注释:只在对大小写不灵活的文件系统上适用! InnoDB表名以小写保存,例如lower_case_tables_name=1。
在Windows和Mac OS X中,lower_case_tables_name的 暗中同意值是1。
若果只在贰个平台上利用MySQL,经常不要求转移lower_case_tables_name变量。不过,倘使你想要在对大小写敏感不相同的文件系统的平台北间转移表,会际遇困难。比如,在Unix中,my_tables和MY_tables是多个不等的表,但在Windows中,那多个表名相近。要想幸免由于数据库或表名的大大小小写酿成的数目转移难点,可利用五个选择:
• 在别的系统中得以接纳lower_case_tables_name=1。使用该选取的不利之处是当使用SHOW TABLES或SHOW 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早前,必需先将旧的数目库名和表名转变为小写。...余下全文>>  

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.)

linux下mysql表名大小写标题

这个和hibernate 无关,MYSQL的问题

1、Linux下mysql安装完后是暗中认可:区分表名的轻重写,不区分列名的高低写;
2、用root帐号登入后,在/etc/my.cnf中的[mysqld]后增多增多lower_case_table_names=1,重启MYSQL服务,当时已安装成功:不区分表名的大小写;
lower_case_table_names参数详细明白:
lower_case_table_names=0
此中0:区分朗朗上口写,1:不区分朗朗上口写

MySQL在Linux下数据库名、表名、列名、外号大小写准绳是如此的:
1、数据库名与表名是严刻区别朗朗上口写的;
2、表的别称是严俊差距抑扬顿挫写的;
3、列名与列的小名在享有的场地下均是忽略大小写的;
4、变量名也是严刻区分朗朗上口写的;
MySQL在Windows下都不区分抑扬顿挫写。
3、倘诺想在查询时分别字段值的轻重写,则:字段值必要设置BINAENVISIONY属性,设置的方法有三种:

A、创建时设置:
CREATE TABLE T(
A VARCHAR(10)BINARY
);

B、使用alter修改:
ALTER TABLE`tablename`MODIFY COLUMN`cloname`VARCHAR(45)BINARY;

C、mysql table editor中从来勾选BINARY项。  

在 MySQL 中,数据库和表其实便是数码目录下的目录和文。...

 

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 开端,那一个选项肖似适用于数据库名。) 注意,当您转移这么些选项时,你必需在运行 mysqld 前第风流洒脱将老的表名转变为小写字母。
$ pwd
/data1/etl/aiinsight/ScheduleServer/mysql/support-files
$ ./mysql.server stop
$ pwd
/data1/etl/aiinsight/ScheduleServer/mysql/bin
./mysqld_safe --lower_case_澳门新萄京:Mysql数据库名和表名在不同系统下的大小写敏感问题,mysql数据库名。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卷):

    都不区分朗朗上口写

 

注意事项:列名、索引、存款和储蓄进度、事件名称在任何平台上都不区分轻重缓急写,列外号也不区分朗朗上口写。

 

Notice:Column, index, stored routine, and event names are not case sensitive on any platform, nor are column aliases.

 

上边在测验遭遇为Red Hat Enterprise Linux Server release 5.7, MySQL 5.6.20:

 

 

mysql> show variables like 'lower_case_table_names';

 ------------------------ ------- 

| Variable_name          | Value |

 ------------------------ ------- 

| lower_case_table_names | 0     |

 ------------------------ ------- 

1 row in set (0.00 sec)

 

mysql> 

 

mysql> use mydb;

Database changed

mysql> create table test(id int);

Query OK, 0 rows affected (0.07 sec)

 

mysql> create table TEST(id int);

Query OK, 0 rows affected (0.09 sec)

 

mysql> insert into test values(1);

Query OK, 1 row affected (0.03 sec)

 

mysql> insert into TEST value(2);

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from test;

 ------ 

| id   |

 ------ 

|    1 |

 ------ 

1 row in set (0.00 sec)

 

mysql> select * from TEST;

 ------ 

| id   |

 ------ 

|    2 |

 ------ 

1 row in set (0.00 sec)

 

mysql> 

 

在配置文件my.cnf中装置lower_case_table_names=1后(1意味不区分轻重缓急写,0表示区分朗朗上口写),重启MySQL服务后,实行如下测验:

 

mysql> use mydb;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

mysql> select * from test;

 ------ 

| id   |

 ------ 

|    1 |

 ------ 

1 row in set (0.00 sec)

 

mysql> select * from TEST;

 ------ 

| id   |

 ------ 

|    1 |

 ------ 

1 row in set (0.00 sec)

 

mysql> 

 

澳门新萄京 2

 

可以见见那儿无论是test、TEST抑或Test,都以探望的test,这时无法访谈"TEST"表了,系统变量lower_case_table_names是只读变量,也敬谢不敏在现阶段对话校订,这种设置下,借使存在相仿的表名的话,使用mysqldump备份数据库时会蒙受上边错误:

 

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

 

 

相见这种情景就比较费劲了,必得在布局文件my.cnf中装置变量lower_case_table_names=0,重启MySQL服务,所以提前安排,使用统后生可畏的命名法规就可怜关键,可防止止那样的问题现身。别的系统变量lower_case_table_names有三个值:分别是0、1、2. 

 

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

 

2. 设置成1:表名转小写后存款和储蓄到硬盘,比较时大小写不灵活。 

 

3. 装置成2:表名按您写的SQL大小写存款和储蓄,大写就大写小写就小写,相比时统后生可畏转小写比较。

 

 

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.

 

关于数据库名大小写敏感,会遇上上边难题:

 

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

 

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

 

mysql> show databases;

 -------------------- 

| Database           |

 -------------------- 

| information_schema |

| MyDB               |

| mydb               |

| mysql              |

| performance_schema |

| tmonitor           |

| xiangrun           |

 -------------------- 

7 rows in set (0.01 sec)

mysql> show variables like 'lower_case_table_names';

 ------------------------ ------- 

| Variable_name          | Value |

 ------------------------ ------- 

| lower_case_table_names | 1     |

 ------------------------ ------- 

1 row in set (0.00 sec)

 

mysql> drop database mydb;

ERROR 1010 (HY000): Error dropping database (can't rmdir './mydb', errno: 39)

mysql> 

 

鸡犬不留措施:在配备文件my.cnf中装置变量lower_case_table_names=0,重启MySQL服务,然后就能够drop 掉数据库了。

 

 

2: ERROR 1049 (42000): Unknown database 'xxx'

 

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> 

 

参谋资料:

 

本文由澳门新萄京发布于数据库,转载请注明出处:澳门新萄京:Mysql数据库名和表名在不同系统下的

上一篇:澳门新萄京:mysql学习记录,MySQL优化大全 下一篇:没有了
猜你喜欢
热门排行
精彩图文