程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql數據庫名、表名大小寫問題

mysql數據庫名、表名大小寫問題

編輯:關於MYSQL數據庫
 在MySQL中,數據庫對應數據目錄中的目錄。數據庫中的每個表至少對應數據庫目錄中的一個文件(也可能是多個,取決於存儲引擎)。因此,所使用操作系統的大小寫敏感性決定了數據庫名

 數據庫名、表名大小寫問題
在MySQL中,數據庫對應數據目錄中的目錄。數據庫中的每個表至少對應數據庫目錄中的一個文件(也可能是多個,取決於存儲引擎)。因此,所使用操作系統的大小寫敏感性決定了數據庫名和表名的大小寫敏感性。這說明在大多數Unix中數據庫名和表名對大小寫敏感,而在Windows中對大小寫不敏感。一個顯著的例外情況是Mac OS X,它基於Unix但使用默認文件系統類型(HFS+),對大小寫不敏感。然而,Mac OS X也支持UFS卷,該卷對大小寫敏感,就像Unix一樣。
注釋:盡管在某些平台中數據庫名和表名對大小寫不敏感,不應在同一查詢中使用不同的大小寫來引用給定的數據庫或表。 下面的查詢不會工作,因為它同時引用了表my_tables和as MY_tables:
MySQL> SELECT * FROM my_table WHERE MY_TABLE.col=1;
列、索引、 存儲子程序和觸發器名在任何平台上對大小寫不敏感,列的別名也不敏感。
默認情況,表別名在Unix中對大小寫敏感,但在Windows或Mac OS X中對大小寫不敏感。
下面的查詢在Unix中不會工作,因為它同時引用了別名a和A:
MySQL> SELECTcol_name FROM tbl_name AS a   WHERE a.col_name = 1 OR A.col_name = 2;
然而,該查詢在Windows中是可以的。要想避免出現差別,最好采用一致的轉換,例如總是用小寫創建並引用數據庫名和表名。在大多數移植和使用中建議使用該轉換。
在MySQL中如何在硬盤上保存和使用表名和數據庫名由lower_case_tables_name系確定,可以在啟動MySQLd時設置。 lower_case_tables_name可以采用下面的任一值:
在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之前,必須先將舊的數據庫名和表名轉換為小寫

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved