mysql中參數low_case_table_name的使用?不同參數值的設置有什么影響?


需求描述:

  今天一個同事問,在mysql中,默認的表名是大小寫區分的嗎,默認是什么設置,

  如果要設置成大小寫不區分的改怎么設置,是否需要進行重啟.然后就進行了查詢,

  對於lower_case_table_names進行了實驗,對該參數的作用進行理解.

操作過程:

1.查看默認的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)

備注:該參數的默認值是0.

2.查看默認的情況,該參數對表名有什么影響

mysql> create database test05;
Query OK, 1 row affected (0.00 sec)

mysql> use test05;
Database changed
mysql> create table tab01(id int); #以小寫創建表
Query OK, 0 rows affected (0.05 sec)

mysql> create table TAB01(id int); #以大寫創建表
Query OK, 0 rows affected (0.04 sec)

mysql> show tables; #通過show variables可以查看表名是通過指定的大小寫進行存儲,即區分大小寫.
+------------------+
| Tables_in_test05 |
+------------------+
| TAB01            |
| tab01            |
+------------------+
2 rows in set (0.00 sec)

mysql> system ls -l /mysql/data/test05 #查看操作系統表對應的文件,也是大小寫區分的.
total 220
-rw-r----- 1 mysql mysql    61 Jun  5 15:37 db.opt
-rw-r----- 1 mysql mysql  8556 Jun  5 15:37 tab01.frm
-rw-r----- 1 mysql mysql  8556 Jun  5 15:37 TAB01.frm
-rw-r----- 1 mysql mysql 98304 Jun  5 15:37 tab01.ibd
-rw-r----- 1 mysql mysql 98304 Jun  5 15:37 TAB01.ibd

mysql> insert into tab01 select 1; #插入的時候,可以分別向兩張表中插入數據
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into TAB01 select 1;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from tab01; #查詢兩張表有不同的值.
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> select * from TAB01;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

備注:在默認情況下,表名是以指定的方式進行存儲的,即大小寫區分.

2.將lower_case_table_names修改為1,重啟實例

[root@testvm ~]# grep "lower" /etc/my.cnf
### table_name lower case
lower_case_table_names = 1

備注:由於lower_case_table_names是全局參數,並且是非動態的,只能在配置文件中配置,重啟生效.

3.查看lower_case_table_names設置為1之后,對表名的影響

mysql> create database test05;
Query OK, 1 row affected (0.00 sec)

mysql> use test05;
Database changed

mysql> create table tab01(id int); #以小寫的名字創建了表. Query OK, 0 rows affected (0.05 sec) mysql> create table TAB01(id int); #以大寫創建表名的時候,就報表存在了. ERROR 1050 (42S01): Table 'tab01' already exists mysql> show tables; #表名以小寫存儲 +------------------+ | Tables_in_test05 | +------------------+ | tab01 | +------------------+ 1 row in set (0.00 sec)

mysql> drop table tab01; #刪除表,以大寫名字創建表.
Query OK, 0 rows affected (0.08 sec)

mysql> create table TAB01(id int);
Query OK, 0 rows affected (0.05 sec)

mysql> show tables; #表名以小寫存在
+------------------+
| Tables_in_test05 |
+------------------+
| tab01            |
+------------------+
1 row in set (0.00 sec)

備注:將lower_case_table_names設置為1的時候,表名是以小寫存儲的,在系統上也是小寫的名字.

3.將lower_case_table_names設置為2,重啟實例

[root@testvm data]# grep "lower" /etc/my.cnf
### table_name lower case
lower_case_table_names = 2

備注:將lower_case_table_names設置為2

4.查看設置為2之后的影響

mysql> drop database test05;
Query OK, 4 rows affected (0.11 sec)

mysql> create database test05;
Query OK, 1 row affected (0.00 sec)

mysql> use test05;
Database changed
mysql> create table tab01(id int);
Query OK, 0 rows affected (0.05 sec)

mysql> create table TAB01(id int);
Query OK, 0 rows affected (0.08 sec)

mysql> show tables;
+------------------+
| Tables_in_test05 |
+------------------+
| TAB01            |
| tab01            |
+------------------+
2 rows in set (0.00 sec)

mysql> system ls -l /mysql/data/test05 #操作系統上文件的名字,以區分大小寫的方式存儲.
total 220
-rw-r----- 1 mysql mysql    61 Jun  5 16:36 db.opt
-rw-r----- 1 mysql mysql  8556 Jun  5 16:37 tab01.frm
-rw-r----- 1 mysql mysql  8556 Jun  5 16:37 TAB01.frm
-rw-r----- 1 mysql mysql 98304 Jun  5 16:37 tab01.ibd
-rw-r----- 1 mysql mysql 98304 Jun  5 16:37 TAB01.ibd

備注:設置為2之后,表名是以區分大小寫的方式存儲的.

 

文檔創建時間:2018年6月5日16:38:40


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM