摘要: 本篇部落格僅作為筆記,如有侵權,請聯系,立即删除(網上找部落格學習,然後手記筆記,因紙質筆記不便儲存,是以儲存到網絡筆記)。
本博介紹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 'collarion%';
實際上,字元集很少是伺服器範圍(甚至資料庫範圍)的設定。不同的表,甚至不同的列都可能需要不同的字元集,而且兩者都可以在建立表時指定。
為了給表指定字元集和校對,可使用帶子句的CREATE TABLE:
CREATE TABLE mytable
(
columnn1 INT,
columnn2 VARCHAR(10)
) DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;
分析:此語句建立一個包含兩列的表,并且指定一個字元集和一個校對順序。
這個例子中指定了CHARACTER SET和COLLATE兩者。一般,MySQL如下确定使用什麼樣的字元集和校對。
(1)如果指定CHARACTER SET和COLLATE兩者,則使用這些值。
(2)如果隻指定CHARACTER SET,則使用此字元集及其預設的校對(如SHOW CHARACTER SET的結果中所示)。
(3)如果既不指定CHARATER SET,也不指定COLLATE,則使用資料庫預設。
除了能指定字元集和校對的表範圍外,MySQL還允許對每個列設定它們,如下所示:
CREATE TABLE mytable
(
columnn1 INT,
columnn2 VARCHAR(10),
column3 VARCHAR(10) CHARACTER SET latin1 COLLATE
lantin1_general_ci
) DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;
分析:這裡對整個表以及一個特定的列指定了CHARACTER SET和COLLATE。
如前所述,校對在對用ORDER BY子句檢索出來的資料排序時起重要的作用。如果你需要用與建立表時不同的校對順序排序特定的SELECT語句,可以在SELECT語句自身中進行:
SELECT * FROM customers
ORDER BY lastname,firstname COLLLATE lantin1_general_cs;
分析:此SELECT使用COLLATE指定一個備用的校對順序(在這個例子中,為區分大小寫的校對)。這顯然将會影響到結果排序的次序。
注意:臨時區分大小寫 上面的SELECT語句示範了再通常不區分大小寫的表上進行區分大小寫搜尋的一種技術。當然,反過來也是可以的。
SELECT的其他COLLATE子句 除了這裡看到的在ORDER BY子句中使用以外,COLLATE還可以用于GROUP BY、HAVING、聚集函數、别名等。
最後,值得注意的是,如果絕對需要,串可以在字元集之間進行轉換。為此,使用Cast()或Convert()函數。
三、小結
本博中,我們學習了字元集和校對的基礎知識,還學習了如何對特定的表和列定義字元集和校對,如何在需要時使用備用的校對。
轉載于:https://www.cnblogs.com/daisy-996/p/10422254.html