mysql lower_case_table_names ---- 一律把表名處理為小寫


 

一、從操作系統說起

  1.我們知道mysql 是跨平台的、它可以在許多平台上運行如windows 、linux、unix(mac)。linux 是類unix的,

  但是windows和linux就有非常大的不同了。 windows:文件名不區分大小寫、linux:文件名區分大小寫;這樣會有一個問題

  a.txt 和 A.txt 在linux 認為這個是兩個不同的文件;windows中認為這個兩個同名文件(也就是說你沒有法辦在同一個文件夾下

  不能同時存在a.txt 和 A.txt)

  2、為了加深映像我們在一個已經有A.txt 的文件夾下增加一個a.txt 看一下windows會說什么

   3、linux下是區分大小寫的

[jianglexing@workstudio Desktop]$ cd tmp
[jianglexing@workstudio tmp]$ ll
total 0
[jianglexing@workstudio tmp]$ touch a.txt
[jianglexing@workstudio tmp]$ touch A.txt
[jianglexing@workstudio tmp]$ ll 
total 0
-rw-rw-r-- 1 jianglexing jianglexing 0 May 28 09:10 a.txt
-rw-rw-r-- 1 jianglexing jianglexing 0 May 28 09:10 A.txt

# linux 中a.txt 和B.txt是算不同的文件的 .

 

二、mysql 是怎樣保存數據的

  1、一個數據庫對應着文件系統中的一個目錄(文件夾)

create database appdb character set utf8;
Query OK, 1 row affected (0.00 sec)

mysql> system ls  -l /usr/local/mysql/data
total 195964
drwxr-x--- 2 mysql mysql       20 May 28 09:15 appdb #appdb 是個文件夾
-rw-r----- 1 mysql mysql       56 Apr 22 21:29 auto.cnf
-rw------- 1 mysql mysql     1676 Apr 22 21:29 ca-key.pem
-rw-r--r-- 1 mysql mysql     1075 Apr 22 21:29 ca.pem
-rw-r--r-- 1 mysql mysql     1079 Apr 22 21:29 client-cert.pem
-rw------- 1 mysql mysql     1676 Apr 22 21:29 client-key.pem
-rw-r----- 1 mysql mysql  3363466 May 28 09:14 error.log
drwxr-x--- 2 mysql mysql      136 May 22 12:28 fdb
-rw-r----- 1 mysql mysql      654 May 27 23:33 ib_buffer_pool
-rw-r----- 1 mysql mysql 79691776 May 28 09:14 ibdata1
-rw-r----- 1 mysql mysql 50331648 May 28 09:14 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 22 21:29 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 May 28 09:14 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Apr 22 21:29 mysql
-rw-r----- 1 mysql mysql      685 May 25 16:17 mysql-bin.000027
-rw-r----- 1 mysql mysql      233 May 25 16:17 mysql-bin.000028
-rw-r----- 1 mysql mysql      209 May 25 16:17 mysql-bin.000029
-rw-r----- 1 mysql mysql      233 May 25 16:52 mysql-bin.000030
-rw-r----- 1 mysql mysql      209 May 25 16:52 mysql-bin.000031
-rw-r----- 1 mysql mysql    31389 May 26 17:27 mysql-bin.000032
-rw-r----- 1 mysql mysql      209 May 26 17:27 mysql-bin.000033
-rw-r----- 1 mysql mysql    26331 May 27 13:57 mysql-bin.000034
-rw-r----- 1 mysql mysql      209 May 27 13:57 mysql-bin.000035
-rw-r----- 1 mysql mysql      396 May 27 16:30 mysql-bin.000036
-rw-r----- 1 mysql mysql      209 May 27 16:30 mysql-bin.000037
-rw-r----- 1 mysql mysql     1575 May 27 23:33 mysql-bin.000038
-rw-r----- 1 mysql mysql      209 May 27 23:33 mysql-bin.000039
-rw-r----- 1 mysql mysql      363 May 28 09:15 mysql-bin.000040
-rw-r----- 1 mysql mysql      266 May 28 09:14 mysql-bin.index
drwxr-x--- 2 mysql mysql     8192 Apr 22 21:29 performance_schema
-rw------- 1 mysql mysql     1676 Apr 22 21:29 private_key.pem
-rw-r--r-- 1 mysql mysql      452 Apr 22 21:29 public_key.pem
-rw-r--r-- 1 mysql mysql     1079 Apr 22 21:29 server-cert.pem
-rw------- 1 mysql mysql     1676 Apr 22 21:29 server-key.pem
drwxr-x--- 2 mysql mysql     8192 Apr 22 21:29 sys
drwxr-x--- 2 mysql mysql     4096 May 27 21:27 tempdb
drwxr-x--- 2 mysql mysql       56 May 26 12:48 testdb
-rw-r----- 1 mysql mysql        5 May 28 09:14 workstudio.pid

  2 表對應着文件系統中的文件

use appdb;
Database changed
mysql> create table person(id int not null auto_increment primary key,name varchar(8));
Query OK, 0 rows affected (0.00 sec)

mysql> create table PERSON(id int not null auto_increment primary key,name varchar(8));
Query OK, 0 rows affected (0.01 sec)

mysql> system ls -l /usr/local/mysql/data/appdb/
total 220
-rw-r----- 1 mysql mysql    61 May 28 09:15 db.opt
-rw-r----- 1 mysql mysql  8586 May 28 09:25 person.frm
-rw-r----- 1 mysql mysql  8586 May 28 09:26 PERSON.frm
-rw-r----- 1 mysql mysql 98304 May 28 09:25 person.ibd
-rw-r----- 1 mysql mysql 98304 May 28 09:26 PERSON.ibd

# 看到了吧、這樣的話linux和windows 就兩個平台就不能兼容了;
# 因為windows 認為PERSON.ibd ==  person.ibd
# person.frm == PERSON.frm

 

三、lower_case_table_names 兼容windows & linux :

  1 如果把lower_case_table_names 設置為1 、那么mysql會把SQL語句中所有的表名都變成小寫;

  2 lower_case_table_names 應該在初始化MySQL的時候就完成的、不然可能會引起一引起問題;

  如:

lower_case_table_names 主要是為了兼容windows & linux 

 

 

 ----

學習交流

 


免責聲明!

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



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