數據庫需要適應各種語言和字符就需要支持不同的字符集(Character Set),每種字符集也有各自的排序規則(Collation)。
(注意:Collation原意為校對,校勘,但是根據實際使用場景,覺得還是翻譯為排序規則比較合適)
在絕大部分情形中,使用何種字符集和排序規則決定於服務器,數據庫和表的級別,一般SQL操作不必關心這些。
以下操作均以MySQL為例。
查看數據庫支持的字符集與排序規則
查看字符集:
SHOW CHARACTER SET;
部分結果:
查看排序規則:(后綴"_cs"或者"_ci"意思是區分大小寫和不區分大小寫(Case Sensitive & Case Insensitve))
SHOW COLLATION;
部分結果:
使用數據庫支持的字符集與排序規則
通常系統管理在安裝時定義一個默認的字符集和排序規則,
也可以在創建數據庫時對數據庫范圍,建表時對表級別,甚至列級別設置字符集和排序規則。
> 下圖為建數據庫時指定字符集和排序規則:
為了確定所用的字符集和排序規則,可以使用下列語句:
SHOW VARIABLES LIKE 'character%'; SHOW VARIABLES LIKE 'collation%';
> 建表時指定表的字符集和排序規則:
1 CREATE TABLE mytable ( 2 column1 INT, 3 column2 VARCHAR (10) 4 ) DEFAULT CHARACTER SET hebrew 5 COLLATE hebrew_general_ci;
不指定字符集和排序規則時使用數據庫默認設置,若指定了字符集沒有指定排序規則,則使用字符集的默認排序規則。
>建表時指定表和列的字符集和排序規則
CREATE TABLE mytable ( column1 INT, column2 VARCHAR (10), column3 VARCHAR (10) CHARACTER SET latin1 COLLATE latin1_general_ci ) DEFAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;
>自定義查詢語句中ORDER BY的排序規則
SELECT * FROM `mytable` ORDER BY `column1` COLLATE latin1_general_cs;
這里的使用不限於ORDER BY,還有GROUP BY,聚集函數等。
參考文章:
【1】MySQL必知必會 2009年1月第一1版 第27章 “全球化與本地化”