1. 程式人生 > 其它 >mysql 必知必會整理—全球化與本地化[十六]

mysql 必知必會整理—全球化與本地化[十六]

前言

簡單介紹一下字符集。

資料庫表被用來儲存和檢索資料。不同的語言和字符集需要以不同的方式儲存和檢索。

因此,MySQL需要適應不同的字符集(不同的字母和字元),適應不同的排序和檢索資料的方法。

  1. 字符集為字母和符號的集合;

  2. 編碼為某個字符集成員的內部表示;

  3. 校對為規定字元如何比較的指令。

校對為什麼重要 排序英文正文很容易,對嗎?或許不。考
慮詞APE、apex和Apple。它們處於正確的排序順序嗎?這有
賴於你是否想區分大小寫。使用區分大小寫的校對順序,這
些詞有一種排序方式,使用不區分大小寫的校對順序有另外
一種排序方式。這不僅影響排序(如用ORDER BY排序資料),
還影響搜尋(例如,尋找apple的WHERE子句是否能找到
APPLE)。在使用諸如法文à或德文ö這樣的字元時,情況更復
雜,在使用不基於拉丁文的字符集(日文、希伯來文、俄文
等)時,情況更為複雜。

在MySQL的正常資料庫活動(SELECT、INSERT等)中,不需要操心太多的東西。使用何種字符集和校對的決定在伺服器、資料庫和表級進行。

正文

MySQL支援眾多的字符集。為檢視所支援的字符集完整列表,使用以下語句:

SHOW CHARACTER SET;

這條語句顯示所有可用的字符集以及每個字符集的描述和預設校對。

為了檢視所支援校對的完整列表,使用以下語句:

SHOW  COLLATION;

此語句顯示所有可用的校對,以及它們適用的字符集。可以看
到有的字符集具有不止一種校對。例如,latin1對不同的歐洲
語言有幾種校對,而且許多校對出現兩次,一次區分大小寫(由_cs表示),
一次不區分大小寫(由_ci表示)。

通常系統管理在安裝時定義一個預設的字符集和校對。此外,也可
以在建立資料庫時,指定預設的字符集和校對。為了確定所用的字符集
和校對,可以使用以下語句:

SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';

實際上,字符集很少是伺服器範圍(甚至資料庫範圍)的設定。

不同的表,甚至不同的列都可能需要不同的字符集,而且兩者都可以在建立表時指定。

此語句建立一個包含兩列的表,並且指定一個字符集和一個校對順序。

這個例子中指定了CHARACTER SET和COLLATE兩者。一般,MySQL如下確定使用什麼樣的字符集和校對。

如果指定CHARACTER SET和COLLATE兩者,則使用這些值。

如果只指定CHARACTER SET,則使用此字符集及其預設的校對(如SHOW CHARACTER SET的結果中所示)。

如果既不指定CHARACTER SET,也不指定COLLATE,則使用資料庫預設。

除了能指定字符集和校對的表範圍外,MySQL還允許對每個列設定它們,如下所示:

這裡對整個表以及一個特定的列指定了CHARACTER SET和COLLATE。

如前所述,校對在對用ORDER BY子句檢索出來的資料排序時起重要的作用。

如果你需要用與建立表時不同的校對順序排序特定的SELECT語句,可以在SELECT語句自身中進行:

此SELECT使用COLLATE指定一個備用的校對順序(在這個例子中,為區分大小寫的校對)。這顯然將會影響到結果排序的次序。

臨時區分大小寫 上面的SELECT語句演示了在通常不區分大小寫的表上進行區分大小寫搜尋的一種技術。當然,反過來也是可以的。

SELECT的其他COLLATE子句 除了這裡看到的在ORDER BY子 句中使用以外,COLLATE還可以用於GROUP BY、HAVING、聚集函式、別名等。

最後,值得注意的是,如果絕對需要,串可以在字符集之間進行轉換。為此,使用Cast()或Convert()函式。

下一節賬戶安全。