MySql 識別符大小寫敏感性

2021-08-27 07:36:08 字數 2159 閱讀 3186

在mysql中,資料庫對應資料目錄中的目錄。資料庫中的每個表至少對應資料庫目錄中的乙個檔案(也可能是多個,取決於儲存引擎)。因此,所使用作業系統的大小寫敏感性決定了資料庫名和表名的大小寫敏感性。這說明在大多數unix中資料庫名和表名對大小寫敏感,而在windows中對大小寫不敏感。乙個顯著的例外情況是mac os x,它基於unix但使用預設檔案系統型別(hfs+),對大小寫不敏感。然而,mac os x也支援ufs卷,該卷對大小寫敏感,就像unix一樣。參見1.8.4節,「mysql對標準sql的擴充套件」。

注釋:儘管在某些平台中資料庫名和表名對大小寫不敏感,不應在同一查詢中使用不同的大小寫來引用給定的資料庫或表。下面的查詢不會工作,因為它同時引用了表my_tables和as my_tables:

mysql>select * from my_table where my_table.col=1;
列、索引、儲存子程式和觸發器名在任何平台上對大小寫不敏感,列的別名也不敏感。

預設情況,表別名在unix中對大小寫敏感,但在windows或mac os x中對大小寫不敏感。下面的查詢在unix中不會工作,因為它同時引用了別名a和a:

mysql>select col_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可以採用下面的任一值:

含義

使用create table或create database語句指定的大寫和小寫在硬碟上儲存表名和資料庫名。名稱比較對大小寫敏感。在unix系統中的預設設定即如此。請注意如果在大小寫不敏感的檔案系統上用--lower-case-table-names=0強制設為0,並且使用不同的大小寫訪問myisam表名,會導致索引破壞。

表名在硬碟上以小寫儲存,名稱比較對大小寫敏感。mysql將所有表名轉換為小寫以便儲存和查詢。該行為也適合資料庫名和表的別名。該值為windows和mac os x系統中的預設值。

表名和資料庫名在硬碟上使用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之前,必須先將舊的資料庫名和表名轉換為小寫。

Mysql的大小寫敏感性

原文 mysql在預設的情況下查詢是不區分大小寫的,例如 create table t1 name varchar 10 對這個表,預設情況下,下面兩個查詢的結果是一樣的 select from t1 where a abc select from t1 where a abc 也就是說不區分大小寫...

mysql的大小寫敏感性

mysql的大小寫敏感性主要分為兩部份 乙個是表名區別大小寫 二是字段值不區分大小寫.這個跟我們希望的恰好相反,而這卻是mysql 的預設設定,不得不令人費解,而這些卻是oracle資料庫比較基本的東西。首先說說mysql建表的特點?如果你建立一張test表,然後你到data目錄下會發現以下三個檔案...

mysql的大小寫敏感性

mysql的大小寫敏感性主要分為兩部份 乙個是表名區別大小寫 二是字段值不區分大小寫.這個跟我們希望的恰好相反,而這卻是mysql 的預設設定,不得不令人費解,而這些卻是oracle資料庫比較基本的東西。首先說說mysql建表的特點?如果你建立一張test表,然後你到data目錄下會發現以下三個檔案...