字符集和校對順序
不同的語言和字符集需要用不同的方式存儲和檢索,因此MySQL需要適應不同的字符集,適應不同的排序和檢索方法。
幾個名詞術語:
1、字符集:字母和符號的集合;
2、編碼:某個字符集成員的內部表示;
3、校對(collation):規定字符如何比較的指令。
使用字符集和校對順序
查看所支持的字符集完整列表
SHOW CHARACTER SET;
這條語句顯示所有可用的字符集以及每個字符集的描述和默認校對信息。
爲了查看所支持校對的完整列表,使用下面語句:
SHOW COLLATION;
該語句顯示所有可用的校對,以及它們適用的字符集。可以看到有的字符集具有不止一種校對。
通常系統管理在安裝時定義一個默認的字符集和校對。此外,可以在創建數據庫時,指定默認的字符集和校對,爲了確定所使用的字符集和校對可使用:
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
實際上,字符集很少是服務器範圍的設置。不同的表甚至於不同的列都可能要用到不同的字符集,而且兩者都可以在創建表時指定。
給表指定字符集和校對,可使用帶子句的CREATE TABLE語句。
創建一個mytable表指定了字符集和校對順序。
CREATE TABLE mytable
(
column1 INT,
column2 VARCHAR(10)
) DEFAULT CHARACTER SET heberw
COLLATE hebrew_general_ci;
- 如果指定CHARACTER SET和COLLATE兩者,則使用這些值。
- 如果只指定CHARACTER SET,則使用此字符集及默認的校對(如SHOW CHARACTER SET的結果中所示)
- 如果即不指定CHARACTER SET,也不指定COLLATE,則使用數據庫默認。
除了對指定字符集和校對的表範圍外,還可以允許對每個列進行設置:
CREATE TABLE mytable
(
column1 INT,
column2 VARCHAR(10),
column3 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci
) DEFAULT CHARACTER SET heberw
COLLATE hebrew_general_ci;
校對在對用ORDER BY子句檢索出來的數據排序時起到了重要作用,如果需要與創建表不同的校對順序排序特定的SELECT語句,可以在SELECT語句自身中進行:
SELECT * FROM customers
ORDER BY lastname,firstname COLLATE lation1_general_cs;
此SELECT語句使用COLLATE語句指定了一個備用的校對順序(爲了區分大小寫的校對)。
除了ORDER BY子句中使用以外,COLLATE還可以用於GROUP BY,HAVING,聚集函數、別名等。
如果需要,串可以在字符集之間進行轉換。使用Cast()或Convert()函數
。
CAST()函數可以將某種數據類型的表達式轉化爲另一種數據類型
CONVERT()函數 也 可以將指定的數據類型轉換爲另一種數據類型