數據庫字符集與排序規則(Character Set And Collation)


  數據庫需要適應各種語言和字符就需要支持不同的字符集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章 “全球化與本地化”


免責聲明!

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



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