?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
目錄
本章討論以下主題:
·???????? 什么是字符集和校對(duì)規(guī)則?
·???????? 多級(jí)默認(rèn)系統(tǒng)
·???????? 字符集語(yǔ)法
·???????? 相關(guān)函數(shù)和運(yùn)算
·???????? Unicode支持
·???????? 每個(gè)字符集和校對(duì)規(guī)則的含義
MySQL5.1中的字符集支持包括在MyISAM、MEMORY和InnoDB存儲(chǔ)引擎中。
字符集是一套符號(hào)和編碼。校對(duì)規(guī)則是在字符集內(nèi)用于比較字符的一套規(guī)則。讓我們使用一個(gè)假想字符集的例子來(lái)區(qū)別清楚。
假設(shè)我們有一個(gè)字母表使用了四個(gè)字母:‘A’、‘B’、‘a’、‘b’。我們?yōu)槊總€(gè)字母賦予一個(gè)數(shù)值:‘A’=0,‘B’= 1,‘a’= 2,‘b’= 3。字母‘A’是一個(gè)符號(hào),數(shù)字0是‘A’的編碼,這四個(gè)字母和它們的編碼組合在一起是一個(gè)字符集。
假設(shè)我們希望比較兩個(gè)字符串的值:‘A’和‘B’。比較的最簡(jiǎn)單的方法是查找編碼:‘A’為0,‘B’為1。因?yàn)?span>0 小于1,我們可以說(shuō)‘A’小于‘B’。我們做的僅僅是在我們的字符集上應(yīng)用了一個(gè) 校對(duì)規(guī)則。校對(duì)規(guī)則是一套規(guī)則(在這種情況下僅僅是一套規(guī)則):“對(duì)編碼進(jìn)行比較。”我們稱(chēng)這種全部可能的規(guī)則中的最簡(jiǎn)單的 校對(duì)規(guī)則為一個(gè)binary(二元)校對(duì)規(guī)則。
但是,如果我們希望小寫(xiě)字母和大寫(xiě)字母是等價(jià)的,應(yīng)該怎樣?那么,我們將至少有兩個(gè)規(guī)則:(1)把小寫(xiě)字母‘a’和‘b’視為與‘A’和‘B’等價(jià);(2)然后比較編碼。我們稱(chēng)這是一個(gè)大小寫(xiě)不敏感的 校對(duì)規(guī)則。比二元校對(duì)規(guī)則復(fù)雜一些。
在實(shí)際生活中,大多數(shù)字符集有許多字符:不僅僅是‘A’和‘B’,而是整個(gè)字母表,有時(shí)候有許多種字母表,或者一個(gè)東方的使用上千個(gè)字符的書(shū)寫(xiě)系統(tǒng),還有許多特殊符號(hào)和標(biāo)點(diǎn)符號(hào)。并且在實(shí)際生活中,大多數(shù) 校對(duì)規(guī)則有許多個(gè)規(guī)則:不僅僅是大小寫(xiě)不敏感,還包括重音符不敏感(“重音符” 是附屬于一個(gè)字母的符號(hào),象德語(yǔ)的‘?’符號(hào))和多字節(jié)映射(例如,作為規(guī)則‘?’=‘OE’就是兩個(gè)德語(yǔ) 校對(duì)規(guī)則的一種)。
MySQL5.1能夠做這些事情:
·???????? 使用多種字符集來(lái)存儲(chǔ)字符串
·???????? 使用多種校對(duì)規(guī)則來(lái)比較字符串
·???????? 在同一臺(tái)服務(wù)器、同一個(gè)數(shù)據(jù)庫(kù)或甚至在同一個(gè)表中使用不同字符集或校對(duì)規(guī)則來(lái)混合字符串
·???????? 允許定義任何級(jí)別的字符集和校對(duì)規(guī)則
在這些方面,MySQL5.1不僅比MySQL4.1以前的版本靈活得多,而且比其它大多數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)超前許多。但是,為了有效地使用這些功能,你需要了解哪些字符集和 校對(duì)規(guī)則是可用的,怎樣改變默認(rèn)值,以及它們?cè)鯓佑绊懽址僮鞣妥址瘮?shù)的行為。
MySQL服務(wù)器能夠支持多種字符集。可以使用SHOW CHARACTER SET語(yǔ)句列出可用的字符集:
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset? | Description???????????????? | Default collation?? | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5???? | Big5 Traditional Chinese??? | big5_chinese_ci???? |????? 2 |
| dec8???? | DEC West European?????????? | dec8_swedish_ci???? |????? 1 |
| cp850??? | DOS West European?????????? | cp850_general_ci??? |????? 1 |
| hp8????? | HP West European??????????? | hp8_english_ci????? |????? 1 |
| koi8r??? | KOI8-R Relcom Russian?????? | koi8r_general_ci??? |????? 1 |
| latin1?? | cp1252???? West European??? | latin1_swedish_ci?? |????? 1 |
| latin2?? | ISO 8859-2 Central European | latin2_general_ci?? |????? 1 |
| swe7???? | 7bit Swedish??????????????? | swe7_swedish_ci???? |????? 1 |
| ascii? ??| US ASCII??????????????????? | ascii_general_ci??? |????? 1 |
| ujis???? | EUC-JP Japanese???????????? | ujis_japanese_ci??? |????? 3 |
| sjis???? | Shift-JIS Japanese????????? | sjis_japanese_ci??? |????? 2 |
| hebrew?? | ISO 8859-8 Hebrew?????????? | hebrew_general_ci?? |????? 1 |
| tis620?? | TIS620 Thai???????????????? | tis620_thai_ci????? |????? 1 |
| euckr??? | EUC-KR Korean?????????????? | euckr_korean_ci???? |????? 2 |
| koi8u??? | KOI8-U Ukrainian??????????? | koi8u_general_ci??? |????? 1 |
| gb2312?? | GB2312 Simplified Chinese?? | gb2312_chinese_ci?? |????? 2 |
| greek??? | ISO 8859-7 Greek??????????? | greek_general_ci??? |????? 1 |
| cp1250?? | Windows Central European??? | cp1250_general_ci?? |????? 1 |
| gbk????? | GBK Simplified Chinese? ????| gbk_chinese_ci????? |????? 2 |
| latin5?? | ISO 8859-9 Turkish????????? | latin5_turkish_ci?? |????? 1 |
...
(完整列表參見(jiàn)10.10節(jié),“MySQL支持的字符集和校對(duì)”。)
任何一個(gè)給定的字符集至少有一個(gè)校對(duì)規(guī)則。它可能有幾個(gè)校對(duì)規(guī)則。
要想列出一個(gè)字符集的校對(duì)規(guī)則,使用SHOW COLLATION語(yǔ)句。例如,要想查看latin1(“西歐ISO-8859-1”)字符集的 校對(duì)規(guī)則,使用下面的語(yǔ)句查找那些名字以latin1開(kāi)頭的 校對(duì)規(guī)則:
mysql> SHOW COLLATION LIKE 'latin1%';
+---------------------+---------+----+---------+----------+---------+
| Collation?????????? | Charset | Id | Default | Compiled | Sortlen |
+---------------------+---------+----+---------+----------+---------+
| latin1_german1_ci?? | latin1? |? 5 |???????? |????????? |?????? 0 |
| latin1_swedish_ci?? | latin1? |? 8 | Yes???? | Yes????? |?????? 1 |
| latin1_danish_ci??? | latin1? | 15 |???????? |????????? |?????? 0 |
| latin1_german2_ci?? | latin1? | 31 |???????? | Yes????? |?????? 2 |
| latin1_bin????????? | latin1? | 47 |???????? | Yes????? |?????? 1 |
| latin1_general_ci?? | latin1? | 48 |???????? |????????? |?????? 0 |
| latin1_general_cs?? | latin1? | 49 |???????? |????????? |?????? 0 |
| latin1_spanish_ci?? | latin1? | 94 |???????? |????????? |?????? 0 |
+---------------------+---------+----+---------+----------+---------+
latin1校對(duì)規(guī)則有下面的含義:
校對(duì)規(guī)則 |
含義 |
latin1_german1_ci |
德國(guó)DIN-1 |
latin1_swedish_ci |
瑞典/芬蘭 |
latin1_danish_ci |
丹麥/挪威 |
latin1_german2_ci |
德國(guó) DIN-2 |
latin1_bin |
符合latin1編碼的二進(jìn)制 |
latin1_general_ci |
多種語(yǔ)言(西歐) |
latin1_general_cs |
多種語(yǔ)言(西歐ISO),大小寫(xiě)敏感 |
latin1_spanish_ci |
現(xiàn)代西班牙 |
校對(duì)規(guī)則一般有這些特征:
·???????? 兩個(gè)不同的字符集不能有相同的校對(duì)規(guī)則。
·???????? 每個(gè)字符集有一個(gè)默認(rèn)校對(duì)規(guī)則。例如,latin1默認(rèn)校對(duì)規(guī)則是latin1_swedish_ci。
·???????? 存在校對(duì)規(guī)則命名約定:它們以其相關(guān)的字符集名開(kāi)始,通常包括一個(gè)語(yǔ)言名,并且以_ci(大小寫(xiě)不敏感)、_cs(大小寫(xiě)敏感)或_bin(二元)結(jié)束。
MySQL按照如下方法確定服務(wù)器字符集和服務(wù)器校對(duì)規(guī)則:
·???????? 當(dāng)服務(wù)器啟動(dòng)時(shí)根據(jù)有效的選項(xiàng)設(shè)置
·???????? 根據(jù)運(yùn)行時(shí)的設(shè)定值
在服務(wù)器級(jí)別,確定方法很簡(jiǎn)單。當(dāng)啟動(dòng)mysqld時(shí),根據(jù)使用的初始選項(xiàng)設(shè)置來(lái)確定服務(wù)器字符集和 校對(duì)規(guī)則??梢允褂?/span>--default-character-set設(shè)置字符集,并且可以在字符集后面為 校對(duì)規(guī)則添加--default-collation。如果沒(méi)有指定一個(gè)字符集,那就與--default-character-set=latin1相同。如果你僅指定了一個(gè)字符集(例如,latin1),但是沒(méi)有指定一個(gè) 校對(duì)規(guī)則,那就與--default-charset=latin1 --default-collation=latin1_swedish_ci相同,因?yàn)?/span>latin1_swedish_ci是latin1的默認(rèn)校對(duì)規(guī)則。因此,以下三個(gè)命令有相同的效果:
shell> mysqld
shell> mysqld --default-character-set=latin1
shell> mysqld --default-character-set=latin1 \
?????????? --default-collation=latin1_swedish_ci
更改設(shè)定值的一個(gè)方法是通過(guò)重新編譯。如果希望在從源程序構(gòu)建時(shí)更改默認(rèn)服務(wù)器字符集和校對(duì)規(guī)則,使用:--with-charset和--with-collation作為configure的參量。例如:
shell> ./configure --with-charset=latin1
或者:
shell> ./configure --with-charset=latin1 \
?????????? --with-collation=latin1_german1_ci
mysqld和configure都驗(yàn)證字符集/校對(duì)規(guī)則組合是否有效。如果無(wú)效,每個(gè)程序都顯示一個(gè)錯(cuò)誤信息,然后終止。
當(dāng)前的服務(wù)器字符集和校對(duì)規(guī)則可以用作character_set_server和collation_server系統(tǒng)變量的值。在運(yùn)行時(shí)能夠改變這些變量的值。
CREATE DATABASE db_name
??? [[DEFAULT] CHARACTER SET charset_name]
??? [[DEFAULT] COLLATE collation_name]
?
ALTER DATABASE db_name
??? [[DEFAULT] CHARACTER SET charset_name]
??? [[DEFAULT] COLLATE collation_name]
例如:
CREATE DATABASE db_name
??? DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
MySQL這樣選擇數(shù)據(jù)庫(kù)字符集和數(shù)據(jù)庫(kù)校對(duì)規(guī)則:
·???????? 如果指定了CHARACTER SET X和COLLATE Y,那么采用字符集X和校對(duì)規(guī)則Y。
·???????? 如果指定了CHARACTER SET X而沒(méi)有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默認(rèn)校對(duì)規(guī)則。
·???????? 否則,采用服務(wù)器字符集和服務(wù)器校對(duì)規(guī)則。
MySQL的CREATE DATABASE ... DEFAULT CHARACTER SET ...語(yǔ)法與標(biāo)準(zhǔn)SQL的CREATE SCHEMA ... CHARACTER SET ...語(yǔ)法類(lèi)似。因此,可以在同一個(gè)MySQL服務(wù)器上創(chuàng)建使用不同字符集和 校對(duì)規(guī)則的數(shù)據(jù)庫(kù)。
如果在CREATE TABLE語(yǔ)句中沒(méi)有指定表字符集和校對(duì)規(guī)則,則使用數(shù)據(jù)庫(kù)字符集和校對(duì)規(guī)則作為默認(rèn)值。它們沒(méi)有其它目的。
默認(rèn)數(shù)據(jù)庫(kù)的字符集和校對(duì)規(guī)則可以用作character_set_database和 collation_database系統(tǒng)變量。無(wú)論何時(shí)默認(rèn)數(shù)據(jù)庫(kù)更改了,服務(wù)器都設(shè)置這兩個(gè)變量的值。如果沒(méi)有 默認(rèn)數(shù)據(jù)庫(kù),這兩個(gè)變量與相應(yīng)的服務(wù)器級(jí)別的變量(character_set_server和collation_server)具有相同的值。
CREATE TABLE tbl_name (column_list)
??? [DEFAULT CHARACTER SET charset_name [COLLATE collation_name]]
?
ALTER TABLE tbl_name
??? [DEFAULT CHARACTER SET charset_name] [COLLATE collation_name]
例如:
CREATE TABLE t1 ( ... )
DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
MySQL按照下面的方式選擇表字符集和 校對(duì)規(guī)則:
·???????? 如果指定了CHARACTER SET X和COLLATE Y,那么采用CHARACTER SET X和COLLATE Y。
·???????? 如果指定了CHARACTER SET X而沒(méi)有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默認(rèn)校對(duì)規(guī)則。
·???????? 否則,采用服務(wù)器字符集和服務(wù)器校對(duì)規(guī)則。
如果在列定義中沒(méi)有指定列字符集和校對(duì)規(guī)則,則默認(rèn)使用表字符集和校對(duì)規(guī)則。表字符集和校對(duì)規(guī)則是MySQL的擴(kuò)展;在標(biāo)準(zhǔn)SQL中沒(méi)有。
col_name {CHAR | VARCHAR | TEXT} (col_length)
??? [CHARACTER SET charset_name [COLLATE collation_name]]
例如:
CREATE TABLE Table1
(
??? column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci
);
MySQL按照下面的方式選擇列字符集和校對(duì)規(guī)則:
·???????? 如果指定了CHARACTER SET X和COLLATE Y,那么采用CHARACTER SET X和COLLATE Y。
·???????? 如果指定了CHARACTER SET X而沒(méi)有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默認(rèn)校對(duì)規(guī)則。
·???????? 否則,采用表字符集和服務(wù)器校對(duì)規(guī)則。
CHARACTER SET和COLLATE子句是標(biāo)準(zhǔn)的SQL。
以下例子顯示了MySQL怎樣確定默認(rèn)字符集和校對(duì)規(guī)則。
示例1:表和列定義
CREATE TABLE t1
(
??? c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci
) DEFAULT CHARACTER SET latin2 COLLATE latin2_bin;
在這里我們有一個(gè)列使用latin1字符集和latin1_german1_ci校對(duì)規(guī)則。是顯式的定義,因此簡(jiǎn)單明了。需要注意的是,在一個(gè)latin2表中存儲(chǔ)一個(gè)latin1列不會(huì)存在問(wèn)題。
示例2:表和列定義
CREATE TABLE t1
(
??? c1 CHAR(10) CHARACTER SET latin1
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
這次我們有一個(gè)列使用latin1字符集和一個(gè)默認(rèn)校對(duì)規(guī)則。盡管它顯得自然,默認(rèn)校對(duì)規(guī)則卻不是表級(jí)。相反,因?yàn)?span>latin1的默認(rèn)校對(duì)規(guī)則總是latin1_swedish_ci,列c1有一個(gè)校對(duì)規(guī)則latin1_swedish_ci(而不是latin1_danish_ci)。
示例3:表和列定義
CREATE TABLE t1
(
??? c1 CHAR(10)
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
我們有一個(gè)列使用一個(gè)默認(rèn)字符集和一個(gè)默認(rèn)校對(duì)規(guī)則。在這種情況下,MySQL查找表級(jí)別來(lái)確定列字符集和 校對(duì)規(guī)則。因此,列c1的字符集是latin1,它的 校對(duì)規(guī)則是latin1_danish_ci。
示例4:數(shù)據(jù)庫(kù)、表和列定義
CREATE DATABASE d1
??? DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_ci;
USE d1;
CREATE TABLE t1
(
??? c1 CHAR(10)
);
我們創(chuàng)建了一個(gè)沒(méi)有指定字符集和校對(duì)規(guī)則的列。我們也沒(méi)有指定表級(jí)字符集和校對(duì)規(guī)則。在這種情況下,MySQL查找數(shù)據(jù)庫(kù)級(jí)的相關(guān)設(shè)置。(數(shù)據(jù)庫(kù)的設(shè)置變?yōu)楸淼脑O(shè)置,其后變?yōu)榱械脑O(shè)置。)因此,列c1的字符集為是latin2,它的 校對(duì)規(guī)則是latin2_czech_ci。
·???????? 服務(wù)器字符集和校對(duì)規(guī)則可以用作character_set_server和collation_server變量的值。
·???????? 默認(rèn)數(shù)據(jù)庫(kù)的字符集和校對(duì)規(guī)則可以用作character_set_database和collation_database變量的值。
在客戶端和服務(wù)器的連接處理中也涉及了字符集和校對(duì)規(guī)則變量。每一個(gè)客戶端有一個(gè)連接相關(guān)的字符集和校對(duì)規(guī)則變量。
考慮什么是一個(gè)“連接”:它是連接服務(wù)器時(shí)所作的事情??蛻舳税l(fā)送SQL語(yǔ)句,例如查詢(xún),通過(guò)連接發(fā)送到服務(wù)器。服務(wù)器通過(guò)連接發(fā)送響應(yīng)給客戶端,例如結(jié)果集。對(duì)于客戶端連接,這樣會(huì)導(dǎo)致一些關(guān)于連接的字符集和 校對(duì)規(guī)則的問(wèn)題,這些問(wèn)題均能夠通過(guò)系統(tǒng)變量來(lái)解決:
·???????? 當(dāng)查詢(xún)離開(kāi)客戶端后,在查詢(xún)中使用哪種字符集?
服務(wù)器使用character_set_client變量作為客戶端發(fā)送的查詢(xún)中使用的字符集。
·???????? 服務(wù)器接收到查詢(xún)后應(yīng)該轉(zhuǎn)換為哪種字符集?
轉(zhuǎn)換時(shí),服務(wù)器使用character_set_connection和collation_connection系統(tǒng)變量。它將客戶端發(fā)送的查詢(xún)從character_set_client系統(tǒng)變量轉(zhuǎn)換到character_set_connection(除非字符串文字具有象_latin1或_utf8的引介詞)。collation_connection對(duì)比較文字字符串是重要的。對(duì)于列值的字符串比較,它不重要,因?yàn)榱芯哂懈叩? 校對(duì)規(guī)則優(yōu)先級(jí)。
·???????? 服務(wù)器發(fā)送結(jié)果集或返回錯(cuò)誤信息到客戶端之前應(yīng)該轉(zhuǎn)換為哪種字符集?
character_set_results變量指示服務(wù)器返回查詢(xún)結(jié)果到客戶端使用的字符集。包括結(jié)果數(shù)據(jù),例如列值和結(jié)果元數(shù)據(jù)(如列名)。
你能夠調(diào)整這些變量的設(shè)置,或可以依賴(lài)默認(rèn)值(這樣,你可以跳過(guò)本章)。
有兩個(gè)語(yǔ)句影響連接字符集:
SET NAMES 'charset_name'
SET CHARACTER SET charset_name
SET NAMES顯示客戶端發(fā)送的SQL語(yǔ)句中使用什么字符集。因此,SET NAMES 'cp1251'語(yǔ)句告訴服務(wù)器“將來(lái)從這個(gè)客戶端傳來(lái)的信息采用字符集cp1251”。它還為服務(wù)器發(fā)送回客戶端的結(jié)果指定了字符集。(例如,如果你使用一個(gè)SELECT語(yǔ)句,它表示列值使用了什么字符集。)
SET NAMES 'x'語(yǔ)句與這三個(gè)語(yǔ)句等價(jià):
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;
將x設(shè)置為character_set_connection也就設(shè)置了collation_connection是x的默認(rèn)校對(duì)規(guī)則。
SET CHARACTER SET語(yǔ)句是類(lèi)似的,但是為 默認(rèn)數(shù)據(jù)庫(kù)設(shè)置連接字符集和校對(duì)規(guī)則。SET CHARACTER SET x語(yǔ)句與這三個(gè)語(yǔ)句等價(jià):
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET collation_connection = @@collation_database;
當(dāng)一個(gè)客戶端連接時(shí),它向服務(wù)器發(fā)送希望使用的字符集名稱(chēng)。服務(wù)器為那個(gè)字符集設(shè)置character_set_client、character_set_results和 character_set_connection變量。(實(shí)際上,服務(wù)器為使用該字符集執(zhí)行一個(gè)SET NAMES操作。)
對(duì)于mysql客戶端,如果你希望使用與默認(rèn)字符集不同的字符集,不需要每次啟動(dòng)時(shí)執(zhí)行SET NAMES語(yǔ)句??梢栽?strong>mysql語(yǔ)句行中或者選項(xiàng)文件中添加一個(gè)--default-character-set選項(xiàng)設(shè)置。例如,你每次運(yùn)行mysql時(shí),以下的選項(xiàng)文件設(shè)置把三個(gè)字符集變量修改為koi8r:
[mysql]
default-character-set=koi8r
例如:假設(shè)column1定義為CHAR(5) CHARACTER SET latin2。如果沒(méi)有設(shè)定SET NAMES或SET CHARACTER SET,那么對(duì)于SELECT column1 FROM t,當(dāng)連接后,服務(wù)器使用客戶端指定的字符集返回列column1的所有值。另一方面,如果你設(shè)定SET NAMES 'latin1'或SET CHARACTER SET latin1,那么發(fā)送結(jié)果之前,服務(wù)器轉(zhuǎn)換latin2值到latin1。轉(zhuǎn)換可能會(huì)丟失那些不屬于兩種字符集的字符。
如果不希望服務(wù)器執(zhí)行任何轉(zhuǎn)換,設(shè)置character_set_results為NULL:
mysql> SET character_set_results = NULL;
一個(gè)字符串文字可能有一個(gè)可選的字符集引介詞和COLLATE子句:
[_charset_name]'string' [COLLATE collation_name]
例如:
SELECT 'string';
SELECT _latin1'string';
SELECT _latin1'string' COLLATE latin1_danish_ci;
對(duì)于簡(jiǎn)單的語(yǔ)句SELECT 'string',字符串使用由character_set_connection和collation_connection系統(tǒng)變量定義的字符集和 校對(duì)規(guī)則。
_charset_name表達(dá)式正式稱(chēng)做一個(gè)引介詞。它告訴解析程序,“后面將要出現(xiàn)的字符串使用字符集X。”因?yàn)橐郧叭藗儗?duì)此感到困惑,我們強(qiáng)調(diào)引介詞不導(dǎo)致任何轉(zhuǎn)換; 它僅是一個(gè)符號(hào),不改變字符串的值。引介詞在標(biāo)準(zhǔn)十六進(jìn)制字母和數(shù)字十六進(jìn)制符號(hào)(x'literal'和 0xnnnn)中是合法的,以及?(當(dāng)在一個(gè)編程語(yǔ)言接口中使用預(yù)處理的語(yǔ)句時(shí)進(jìn)行參數(shù)替換)。
例如:
SELECT _latin1 x'AABBCC';
SELECT _latin1 0xAABBCC;
SELECT _latin1 ?;
MySQL這樣確定一個(gè)文字字符集和校對(duì)規(guī)則:
·???????? 如果指定了CHARACTER SET X和COLLATE Y,那么使用CHARACTER SET X和COLLATE Y。
·???????? 如果指定了CHARACTER SET X而沒(méi)有指定COLLATE Y,那么使用CHARACTER SET X和CHARACTER SET X的默認(rèn)校對(duì)規(guī)則。
·???????? 否則,使用通過(guò)character_set_connection 和 collation_connection系統(tǒng)變量給出的字符集和 校對(duì)規(guī)則。
例如:
·???????? 使用latin1字符集和latin1_german1_ci校對(duì)規(guī)則的字符串:
·??????????????? SELECT _latin1'Müller' COLLATE latin1_german1_ci;
·???????? 使用latin1字符集和其默認(rèn)校對(duì)規(guī)則的字符串(即,latin1_swedish_ci):
·??????????????? SELECT _latin1'Müller';
·???????? 使用連接默認(rèn)字符集和校對(duì)規(guī)則的字符串:
·??????????????? SELECT 'Müller';
字符集引介詞和COLLATE子句是根據(jù)標(biāo)準(zhǔn)SQL規(guī)范實(shí)現(xiàn)的。
·???????? 使用ORDER BY:
·??????????????? SELECT k
·??????????????? FROM t1
·??????????????? ORDER BY k COLLATE latin1_german2_ci;
·???????? 使用AS:
·??????????????? SELECT k COLLATE latin1_german2_ci AS k1
·??????????????? FROM t1
·??????????????? ORDER BY k1;
·???????? 使用GROUP BY:
·??????????????? SELECT k
·??????????????? FROM t1
·??????????????? GROUP BY k COLLATE latin1_german2_ci;
·???????? 使用聚合函數(shù):
·??????????????? SELECT MAX(k COLLATE latin1_german2_ci)
·??????????????? FROM t1;
·???????? 使用DISTINCT:
·??????????????? SELECT DISTINCT k COLLATE latin1_german2_ci
·??????????????? FROM t1;
·???????? 使用WHERE:
·??????????????? ?????SELECT *
·??????????????? ?????FROM t1
·??????????????? ?????WHERE _latin1 'Müller' COLLATE latin1_german2_ci = k;
·??????????????? ?????SELECT *
·??????????????? ?????FROM t1
·??????????????? ?????WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci;
·???????? 使用HAVING:
·??????????????? SELECT k
·??????????????? FROM t1
·??????????????? GROUP BY k
·??????????????? HAVING k = _latin1 'Müller' COLLATE latin1_german2_ci;
COLLATE子句有較高的優(yōu)先級(jí)(高于||),因此下面兩個(gè)表達(dá)式是等價(jià)的:
x || y COLLATE z
x || (y COLLATE z)
SELECT * FROM t1 ORDER BY BINARY a;
SELECT * FROM t1 ORDER BY a COLLATE latin1_bin;
在絕大多數(shù)查詢(xún)中,MySQL使用哪種校對(duì)規(guī)則進(jìn)行比較是很顯然的。例如,在下列情況中,校對(duì)規(guī)則明顯的是“列x的列校對(duì)規(guī)則”:
SELECT x FROM T ORDER BY x;
SELECT x FROM T WHERE x = x;
SELECT DISTINCT x FROM T;
但是,當(dāng)涉及多個(gè)操作數(shù)時(shí),可能不明確。例如:
SELECT x FROM T WHERE x = 'Y';
這個(gè)查詢(xún)應(yīng)該使用列x的 校對(duì)規(guī)則,還是字符串文字'Y'的 校對(duì)規(guī)則?
標(biāo)準(zhǔn)化SQL使用“可壓縮性”規(guī)則解決這種問(wèn)題?;旧?,這個(gè)意思是:既然x和'Y'都有 校對(duì)規(guī)則,哪個(gè)校對(duì)規(guī)則優(yōu)先?這可能比較難解決,但是以下規(guī)則適合大多數(shù)情況:
·???????? 一個(gè)外在的COLLATE子句可壓縮性是0(根本不能壓縮。)
·???????? 使用不同校對(duì)規(guī)則的兩個(gè)字符串連接的可壓縮性是1。
·???????? 列校對(duì)規(guī)則的可壓縮性是2。
·???????? “系統(tǒng)常數(shù)”(如USER()或VERSION()函數(shù)返回的字符串)可壓縮性是3。
·???????? 文字規(guī)則的可壓縮性是4。
·???????? NULL或從NULL派生的表達(dá)式的可壓縮性是 5。
上述可壓縮性值是MySQL5.1當(dāng)前所用的。
這樣上述規(guī)則可以模糊解決:
·???????? 使用最低的可壓縮性值的校對(duì)規(guī)則。
·???????? 如果兩側(cè)有相同的可壓縮性,那么如果校對(duì)規(guī)則不同則發(fā)生錯(cuò)誤。
例如:
column1 = 'A' |
使用column1的校對(duì)規(guī)則 |
column1 = 'A' COLLATE x |
使用'A'的校對(duì)規(guī)則 |
column1 COLLATE x = 'A' COLLATE y |
錯(cuò)誤 |
使用COERCIBILITY()函數(shù)確定一個(gè)字符串表達(dá)式的可壓縮性:
mysql> SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);
??????? -> 0
mysql> SELECT COERCIBILITY(VERSION());
??????? -> 3
mysql> SELECT COERCIBILITY('A');
??????? -> 4
見(jiàn)12.9.3節(jié),“信息函數(shù)”。
沒(méi)有系統(tǒng)常數(shù)或可忽略的壓縮性。函數(shù)如USER()的可壓縮性是2而不是3,文字的可壓縮性是3而不是4。
請(qǐng)注意每個(gè)字符集有一個(gè)或多個(gè)校對(duì)規(guī)則,并且每個(gè)校對(duì)規(guī)則只能屬于一個(gè)字符集。因此,以下語(yǔ)句會(huì)產(chǎn)生一個(gè)錯(cuò)誤信息,因?yàn)樾?duì)規(guī)則latin2_bin對(duì)于字符集latin1非法:
mysql> SELECT _latin1 'x' COLLATE latin2_bin;
ERROR 1251: COLLATION 'latin2_bin' is not valid
for CHARACTER SET 'latin1'
假設(shè)表T中的列X有這些latin1列值:
Muffler
Müller
MX Systems
MySQL
假設(shè)使用下面的語(yǔ)句獲取列值:
SELECT X FROM T ORDER BY X COLLATE collation_name;
使用不同校對(duì)規(guī)則的列值結(jié)果排序見(jiàn)下表:
latin1_swedish_ci |
latin1_german1_ci |
latin1_german2_ci |
Muffler |
Muffler |
Müller |
MX系統(tǒng) |
Müller |
Muffler |
Müller |
MX系統(tǒng) |
MX系統(tǒng) |
MySQL |
MySQL |
MySQL |
本表顯示了我們?cè)?span>ORDER BY字句中使用不同所校對(duì)規(guī)則的效果的示例。在本例中導(dǎo)致不同排序的字符是上面帶有兩個(gè)圓點(diǎn)的U(ü),它在德語(yǔ)中發(fā)音為"U-umlaut"。
·???????? 第一列顯示的是使用瑞典/芬蘭校對(duì)規(guī)則的SELECT語(yǔ)句的結(jié)果,它被稱(chēng)作U-umlaut使用Y排序。
·???????? 第二列顯示的是使用德語(yǔ)DIN-1校對(duì)規(guī)則的SELECT語(yǔ)句的結(jié)果,它被稱(chēng)作U-umlaut使用U排序。
·???????? 第三列顯示的是使用德語(yǔ)DIN-2校對(duì)規(guī)則的SELECT語(yǔ)句的結(jié)果,它被稱(chēng)作U-umlaut使用UE排序。
對(duì)于簡(jiǎn)單的函數(shù),即接收字符串輸入然后返回一個(gè)字符串結(jié)果作為輸出的函數(shù),輸出的字符集和校對(duì)規(guī)則與原始輸入的相同。例如,UPPER(X)返回一個(gè)字符串,其字符和 校對(duì)規(guī)則與X相同。類(lèi)似的函數(shù)還有INSTR()、LCASE()、LOWER()、LTRIM()、MID()、REPEAT()、REPLACE()、REVERSE()、RIGHT()、RPAD()、RTRIM()、SOUNDEX()、SUBSTRING()、TRIM()、UCASE()和UPPER()。(還需要注意:REPLACE()函數(shù)不同于其它函數(shù),它總是忽略輸入字符串的 校對(duì)規(guī)則,并且進(jìn)行大小寫(xiě)不敏感的比較。)
對(duì)于合并多個(gè)字符串輸入并且返回單個(gè)字符串輸出的運(yùn)算,應(yīng)用標(biāo)準(zhǔn)SQL“聚合規(guī)則”:
·???????? 如果存在顯式的校對(duì)規(guī)則X,那么使用X。
·???????? 如果存在顯式的校對(duì)規(guī)則X和Y,那么產(chǎn)生一個(gè)錯(cuò)誤。
·???????? 否則,如果全部校對(duì)規(guī)則是X,那么使用X。
·???????? 其它情況,結(jié)果沒(méi)有校對(duì)規(guī)則。
例如,使用CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END。結(jié)果校對(duì)規(guī)則是X。對(duì)于CASE、UNION、||、CONCAT()、ELT()、GREATEST()、IF()和LEAST()情況相同。
對(duì)于轉(zhuǎn)換為字符數(shù)據(jù)的運(yùn)算,從運(yùn)算得到的結(jié)果字符串的字符集和校對(duì)規(guī)則由character_set_connection和collation_connection系統(tǒng)變量定義。這適用于CAST()、CHAR()、CONV()、FORMAT()、HEX()和SPACE()函數(shù)。
CONVERT(expr USING transcoding_name)
在 MySQL中,轉(zhuǎn)換代碼名與相應(yīng)的字符集名相同。
例子:
SELECT CONVERT(_latin1'Müller' USING utf8);
INSERT INTO utf8table (utf8column)
??? SELECT CONVERT(latin1field USING utf8) FROM latin1table;
CONVERT(... USING ...)根據(jù)標(biāo)準(zhǔn)SQL規(guī)范實(shí)施。
在傳統(tǒng)SQL模式中,如果你轉(zhuǎn)換一個(gè)“0”日期字符串到日期類(lèi)型,CONVERT()函數(shù)返回NULL。在MySQL5.1中還產(chǎn)生一條警告。
CAST(character_string AS character_data_type CHARACTER SET charset_name)
例如:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8);
如果使用CAST()時(shí)沒(méi)有指定CHARACTER SET,結(jié)果字符集和校對(duì)規(guī)則通過(guò)character_set_connection 和 collation_connection系統(tǒng)變量定義。如果用CAST()并帶有CHARACTER SET X選項(xiàng),那么結(jié)果字符集和校對(duì)規(guī)則是X和其 默認(rèn)的校對(duì)規(guī)則。
你可能不能在CAST()中使用COLLATE子句,但是你可以在外部使用它。也就是說(shuō),不是CAST(... COLLATE ...),而是CAST(...) COLLATE ...。
例如:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
在傳統(tǒng)SQL模式中,如果你轉(zhuǎn)換一個(gè)“0”日期字符串到日期類(lèi)型,CAST()函數(shù)返回NULL。在MySQL5.1中還產(chǎn)生一條警告。
一些SHOW語(yǔ)句提供額外的字符集信息。這些語(yǔ)句包括SHOW CHARACTER SET、SHOW COLLATION、SHOW CREATE DATABASE、SHOW CREATE TABLE和SHOW COLUMNS。
SHOW CHARACTER SET命令顯示全部可用的字符集。它帶有一個(gè)可選的LIKE子句來(lái)指示匹配哪些字符集名。例如:
mysql> SHOW CHARACTER SET LIKE 'latin%';
+---------+-----------------------------+-------------------+--------+
| Charset | Description???????????????? | Default collation | Maxlen |
+---------+-----------------------------+-------------------+--------+
| latin1? | cp1252 West European??????? | latin1_swedish_ci |????? 1 |
| latin2? | ISO 8859-2 Central European | latin2_general_ci |????? 1 |
| latin5? | ISO 8859-9 Turkish????????? | latin5_turkish_ci |????? 1 |
| latin7? | ISO 8859-13 Baltic????????? | latin7_general_ci |????? 1 |
+---------+-----------------------------+-------------------+--------+
見(jiàn)13.5.4.1節(jié),“SHOW CHARACTER SET語(yǔ)法”。
SHOW COLLATION語(yǔ)句的輸出包括全部可用的字符集。它帶有一個(gè)可選的LIKE子句來(lái)指示匹配哪些 校對(duì)規(guī)則名。例如:
mysql> SHOW COLLATION LIKE 'latin1%';
+-------------------+---------+----+---------+----------+---------+
| Collation???????? | Charset | Id | Default | Compiled | Sortlen |
+-------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1? |? 5 |???????? |????????? |?????? 0 |
| latin1_swedish_ci | latin1? |? 8 | Yes???? | Yes????? |?????? 0 |
| latin1_danish_ci? | latin1? | 15 |???????? |????? ????|?????? 0 |
| latin1_german2_ci | latin1? | 31 |???????? | Yes????? |?????? 2 |
| latin1_bin??????? | latin1? | 47 |???????? | Yes????? |?????? 0 |
| latin1_general_ci | latin1? | 48 |???????? |????????? |?????? 0 |
| latin1_general_cs | latin1? | 49 |???????? |????????? |?????? 0 |
| latin1_spanish_ci | latin1? | 94 |???????? |????????? |?????? 0 |
+-------------------+---------+----+---------+----------+---------+
見(jiàn)13.5.4.2節(jié),“SHOW COLLATION語(yǔ)法”。
SHOW CREATE DATABASE語(yǔ)句顯示創(chuàng)建給定數(shù)據(jù)庫(kù)的CREATE DATABASE語(yǔ)句。結(jié)果包括全部數(shù)據(jù)庫(kù)選項(xiàng)。支持DEFAULT CHARACTER SET和COLLATE。全部數(shù)據(jù)庫(kù)選項(xiàng)存儲(chǔ)在命名為db.Opt的文本文件中,該文件能夠在數(shù)據(jù)庫(kù)目錄中找到。
mysql> SHOW CREATE DATABASE test;
+----------+-----------------------------------------------------------------+
| Database | Create Database???????????????????????????????????????????????? |
+----------+-----------------------------------------------------------------+
| test???? | CREATE DATABASE `test` |
+----------+-----------------------------------------------------------------+
見(jiàn)13.5.4.4節(jié),“SHOW CREATE DATABASE語(yǔ)法”
SHOW CREATE TABLE與SHOW CREATE DATABASE相似,但是顯示創(chuàng)建給定數(shù)據(jù)庫(kù)的CREATE TABLE語(yǔ)句。列定義顯示任何字符集規(guī)格,并且表選項(xiàng)包括字符集信息。
見(jiàn)13.5.4.5節(jié),“SHOW CREATE TABLE語(yǔ)法”
當(dāng)以SHOW FULL COLUMNS調(diào)用時(shí),SHOW COLUMNS語(yǔ)句顯示表中列的校對(duì)規(guī)則。具有CHAR、VARCHAR或TEXT數(shù)據(jù)類(lèi)型的列有非NULL的 校對(duì)規(guī)則。數(shù)值列和其它非字符類(lèi)型的列有NULL校對(duì)規(guī)則。例如:
mysql> SHOW FULL COLUMNS FROM person\G
*************************** 1. row ***************************
???? Field: id
????? Type: smallint(5) unsigned
?Collation: NULL
????? Null: NO
?????? Key: PRI
?? Default: NULL
???? Extra: auto_increment
Privileges: select,insert,update,references
?? Comment:
*************************** 2. row ***************************
???? Field: name
????? Type: char(60)
?Collation: latin1_swedish_ci
????? Null: NO
?????? Key:
?? Default:
???? Extra:
Privileges: select,insert,update,references
?? Comment:
字符集不是顯示的部分。(字符集名隱含在校對(duì)規(guī)則名中。)
見(jiàn)13.5.4.3節(jié),“SHOW COLUMNS語(yǔ)法”。
MySQL 5.1支持兩種字符集以保存Unicode數(shù)據(jù):
·???????? ucs2,UCS-2 Unicode字符集。
·???????? utf8,Unicode字符集的UTF8編碼。
在UCS-2(二進(jìn)制Unicode表示法)中,每一個(gè)字符用一個(gè)雙字節(jié)的Unicode編碼來(lái)表示的,第一個(gè)字節(jié)表示重要的意義。例如:"LATIN CAPITAL LETTER A"的Unicode編碼是0x0041,它按順序存儲(chǔ)為兩個(gè)字節(jié):0x00 0x41。"CYRILLIC SMALL LETTER YERU"(Unicode 0x044B)順序存儲(chǔ)為兩個(gè)字節(jié):0x04 0x4B。對(duì)于Unicode字符和它們的編碼,請(qǐng)參見(jiàn)Unicode 主頁(yè) 。
當(dāng)前,UCS-2還不能夠用作為客戶端字符集,這意味著SET NAMES 'ucs2'不起作用。
UTF8字符集(轉(zhuǎn)換Unicode表示)是存儲(chǔ)Unicode數(shù)據(jù)的一種可選方法。它根據(jù) RFC 3629執(zhí)行。UTF8字符集的思想是不同Unicode字符采用變長(zhǎng)字節(jié)序列編碼:
·???????? 基本拉丁字母、數(shù)字和標(biāo)點(diǎn)符號(hào)使用一個(gè)字節(jié)。
·???????? 大多數(shù)的歐洲和中東手寫(xiě)字母適合兩個(gè)字節(jié)序列:擴(kuò)展的拉丁字母(包括發(fā)音符號(hào)、長(zhǎng)音符號(hào)、重音符號(hào)、低音符號(hào)和其它音符)、西里爾字母、希臘語(yǔ)、亞美尼亞語(yǔ)、希伯來(lái)語(yǔ)、阿拉伯語(yǔ)、敘利亞語(yǔ)和其它語(yǔ)言。
·???????? 韓語(yǔ)、中文和日本象形文字使用三個(gè)字節(jié)序列。
RFC 3629說(shuō)明了采用一到四個(gè)字節(jié)的編碼序列。當(dāng)前,MySQLUTF8不支持四個(gè)字節(jié)。(UTF8編碼的舊標(biāo)準(zhǔn)是由RFC 2279給出,它描述了從一到六個(gè)字節(jié)的UTF8編碼序列。RFC 3629補(bǔ)充了作廢的RFC 2279;因此,不再使用5個(gè)字節(jié)和6個(gè)字節(jié)的編碼序列。)
提示:使用UTF8時(shí)為了節(jié)省空間,使用VARCHAR而不要用CHAR。否則,MySQL必須為一個(gè)CHAR(10) CHARACTER SET utf8列預(yù)備30個(gè)字節(jié),因?yàn)檫@是可能的最大長(zhǎng)度。
元數(shù)據(jù)是“關(guān)于數(shù)據(jù)的數(shù)據(jù)”。描述數(shù)據(jù)庫(kù)的任何數(shù)據(jù)—作為數(shù)據(jù)庫(kù)內(nèi)容的對(duì)立面—是元數(shù)據(jù)。因此,列名、數(shù)據(jù)庫(kù)名、用戶名、版本名以及從SHOW語(yǔ)句得到的結(jié)果中的大部分字符串是元數(shù)據(jù)。還包括INFORMATION_SCHEMA數(shù)據(jù)庫(kù)中的表中的內(nèi)容,因?yàn)槎x的那些表存儲(chǔ)關(guān)于數(shù)據(jù)庫(kù)對(duì)象的信息。
元數(shù)據(jù)表述必須滿足這些需求:
·???????? 全部元數(shù)據(jù)必須在同一字符集內(nèi)。否則,對(duì)INFORM一個(gè)TION_SCHEMA數(shù)據(jù)庫(kù)中的表執(zhí)行的SHOW命令和SELECT查詢(xún)不能正常工作,因?yàn)檫@些運(yùn)算結(jié)果中的同一列的不同行將會(huì)使用不同的字符集。
·???????? 元數(shù)據(jù)必須包括所有語(yǔ)言的所有字符。否則,用戶將不能夠使用它們自己的語(yǔ)言來(lái)命名列和表。
為了滿足這兩個(gè)需求,MySQL使用Unicode字符集存儲(chǔ)元數(shù)據(jù),即UTF8。如果你從不使用重音字符,這不會(huì)導(dǎo)致任何破壞。但如果你使用重音字符,應(yīng)該注意的是元數(shù)據(jù)是用UTF8存儲(chǔ)。
這意味著,USER()、CURRENT_USER()、DATABASE()和VERSION()函數(shù)的返回值被 默認(rèn)設(shè)置為UTF8字符集,這與同義函數(shù)如SESSION_USER() 和SYSTEM_USER()的結(jié)果相同。
服務(wù)器將character_set_system系統(tǒng)變量設(shè)置為元數(shù)據(jù)字符集的名:
mysql> SHOW VARIABLES LIKE 'character_set_system';
+----------------------+-------+
| Variable_name??????? | Value |
+----------------------+-------+
| character_set_system | utf8? |
+----------------------+-------+
存儲(chǔ)元數(shù)據(jù)使用Unicode并不意味著列頭和DESCRIBE函數(shù)的結(jié)果默認(rèn)在character_set_system字符集中。當(dāng)你使用SELECT column1 FROM t語(yǔ)句時(shí),名字為column1的列從服務(wù)器返回客戶端并使用由SET NAMES語(yǔ)句確定的字符集。更明確地說(shuō),使用的字符集是由character_set_results系統(tǒng)變量的值確定的。如果這個(gè)系統(tǒng)變量設(shè)置為NULL,不執(zhí)行字符轉(zhuǎn)換,服務(wù)器使用最初的字符集(字符集由character_set_system系統(tǒng)變量設(shè)置)返回元數(shù)據(jù)。
如果你希望服務(wù)器不使用UTF8字符集返回元數(shù)據(jù)結(jié)果,那么使用SET NAMES語(yǔ)句強(qiáng)制服務(wù)器執(zhí)行字符集轉(zhuǎn)換(見(jiàn)10.3.6節(jié),“連接字符集和校對(duì)”),或者在客戶端執(zhí)行轉(zhuǎn)換。在客戶端執(zhí)行轉(zhuǎn)換效率較高,但這種選項(xiàng)并不能使用于全部客戶端。
如果你正在一個(gè)語(yǔ)句中使用(例如)USER()函數(shù)進(jìn)行比較或賦值,不要擔(dān)心。MySQL為你執(zhí)行一些原子轉(zhuǎn)換。
SELECT * FROM Table1 WHERE USER() = latin1_column;
這是可以的,因?yàn)樵诒容^之前latin1_column列的內(nèi)容會(huì)自動(dòng)轉(zhuǎn)換到UTF8。
INSERT INTO Table1 (latin1_column) SELECT USER();
這是可以的,因?yàn)橘x值之前USER()函數(shù)返回的內(nèi)容自動(dòng)轉(zhuǎn)換為latin1。至今,自動(dòng)轉(zhuǎn)換沒(méi)有全部實(shí)施,但是以后的版本中應(yīng)該工作正常。
盡管自動(dòng)轉(zhuǎn)換不屬于SQL標(biāo)準(zhǔn),SQL標(biāo)準(zhǔn)化文檔中說(shuō)每一個(gè)字符集是(根據(jù)支持的字符)Unicode的“子集”。因此,一個(gè)知名的原則是,“適用超集的字符集能夠應(yīng)用于其子集”,我們相信Unicode的 校對(duì)規(guī)則能夠應(yīng)用于非Unicode字符串的比較。
注釋:在MySQL5.1中,errmsg.txt文件全部使用UTF8??蛻舳俗址霓D(zhuǎn)換是自動(dòng)進(jìn)行的,如同元數(shù)據(jù)。
對(duì)于MaxDB兼容性,下面兩個(gè)語(yǔ)句是相同的:
CREATE TABLE t1 (f1 CHAR(n) UNICODE); CREATE TABLE t1 (f1 CHAR(n) CHARACTER SET ucs2);
CHAR(10) CHARACTER SET utf8
NATIONAL CHARACTER(10)
NCHAR(10)
下面同樣:
VARCHAR(10) CHARACTER SET utf8
NATIONAL VARCHAR(10)
NCHAR VARCHAR(10)
NATIONAL CHARACTER VARYING(10)
NATIONAL CHAR VARYING(10)
你能夠使用N'literal'來(lái)創(chuàng)建一個(gè)使用國(guó)家特有字符集的字符串。這兩個(gè)語(yǔ)句是等價(jià)的:
SELECT N'some text';
SELECT _utf8'some text';
關(guān)于MySQL從4.1以前的版本到5.1版本字符集升級(jí)的信息,請(qǐng)參見(jiàn)MySQL4.1參考手冊(cè)。
MySQL支持30多種字符集的70多種 校對(duì)規(guī)則。字符集和它們的默認(rèn)校對(duì)規(guī)則可以通過(guò)SHOW CHARACTER SET語(yǔ)句顯示:
mysql> SHOW CHARACTER SET; +----------+-----------------------------+---------------------+ | Charset | Description | Default collation | +----------+-----------------------------+---------------------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | | dec8 | DEC West European | dec8_swedish_ci | | cp850 | DOS West European | cp850_general_ci | | hp8 | HP West European | hp8_english_ci | | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | | latin1 | cp1252 West European | latin1_swedish_ci | | latin2 | ISO 8859-2 Central European | latin2_general_ci | | swe7 | 7bit Swedish | swe7_swedish_ci | | ascii | US ASCII | ascii_general_ci | | ujis | EUC-JP Japanese | ujis_japanese_ci | | sjis | Shift-JIS Japanese | sjis_japanese_ci | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | | tis620 | TIS620 Thai | tis620_thai_ci | | euckr | EUC-KR Korean | euckr_korean_ci | | koi8u | KOI8-U Ukrainian | koi8u_general_ci | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | | greek | ISO 8859-7 Greek | greek_general_ci | | cp1250 | Windows Central European | cp1250_general_ci | | gbk | GBK Simplified Chinese | gbk_chinese_ci | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | | utf8 | UTF-8 Unicode | utf8_general_ci | | ucs2 | UCS-2 Unicode | ucs2_general_ci | | cp866 | DOS Russian | cp866_general_ci | | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | | macce | Mac Central European | macce_general_ci | | macroman | Mac West European | macroman_general_ci | | cp852 | DOS Central European | cp852_general_ci | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | | cp1251 | Windows Cyrillic | cp1251_general_ci | | cp1256 | Windows Arabic | cp1256_general_ci | | cp1257 | Windows Baltic | cp1257_general_ci | | binary | Binary pseudo charset | binary | | geostd8 | GEOSTD8 Georgian | geostd8_general_ci | | cp932 | SJIS for Windows Japanese | cp932_japanese_ci | | eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | +----------+-----------------------------+---------------------+
MySQL有兩種Unicode字符集。你能夠使用這些字符集保存大約650種語(yǔ)言的文本。
·???????? ucs2 (UCS-2 Unicode)校對(duì)規(guī)則:
mysql> SHOW COLLATION LIKE 'ucs2%'; +--------------------+---------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +--------------------+---------+-----+---------+----------+---------+ | ucs2_general_ci | ucs2 | 35 | Yes | Yes | 1 | | ucs2_bin | ucs2 | 90 | | Yes | 1 | | ucs2_unicode_ci | ucs2 | 128 | | Yes | 8 | | ucs2_icelandic_ci | ucs2 | 129 | | Yes | 8 | | ucs2_latvian_ci | ucs2 | 130 | | Yes | 8 | | ucs2_romanian_ci | ucs2 | 131 | | Yes | 8 | | ucs2_slovenian_ci | ucs2 | 132 | | Yes | 8 | | ucs2_polish_ci | ucs2 | 133 | | Yes | 8 | | ucs2_estonian_ci | ucs2 | 134 | | Yes | 8 | | ucs2_spanish_ci | ucs2 | 135 | | Yes | 8 | | ucs2_swedish_ci | ucs2 | 136 | | Yes | 8 | | ucs2_turkish_ci | ucs2 | 137 | | Yes | 8 | | ucs2_czech_ci | ucs2 | 138 | | Yes | 8 | | ucs2_danish_ci | ucs2 | 139 | | Yes | 8 | | ucs2_lithuanian_ci | ucs2 | 140 | | Yes | 8 | | ucs2_slovak_ci | ucs2 | 141 | | Yes | 8 | | ucs2_spanish2_ci | ucs2 | 142 | | Yes | 8 | | ucs2_roman_ci | ucs2 | 143 | | Yes | 8 | | ucs2_persian_ci | ucs2 | 144 | | Yes | 8 | | ucs2_esperanto_ci | ucs2 | 145 | | Yes | 8 | +--------------------+---------+-----+---------+----------+---------+
utf8 (UTF-8 Unicode)校對(duì)規(guī)則:
mysql> SHOW COLLATION LIKE 'utf8%'; +--------------------+---------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +--------------------+---------+-----+---------+----------+---------+ | utf8_general_ci | utf8 | 33 | Yes | Yes | 1 | | utf8_bin | utf8 | 83 | | Yes | 1 | | utf8_unicode_ci | utf8 | 192 | | Yes | 8 | | utf8_icelandic_ci | utf8 | 193 | | Yes | 8 | | utf8_latvian_ci | utf8 | 194 | | Yes | 8 | | utf8_romanian_ci | utf8 | 195 | | Yes | 8 | | utf8_slovenian_ci | utf8 | 196 | | Yes | 8 | | utf8_polish_ci | utf8 | 197 | | Yes | 8 | | utf8_estonian_ci | utf8 | 198 | | Yes | 8 | | utf8_spanish_ci | utf8 | 199 | | Yes | 8 | | utf8_swedish_ci | utf8 | 200 | | Yes | 8 | | utf8_turkish_ci | utf8 | 201 | | Yes | 8 | | utf8_czech_ci | utf8 | 202 | | Yes | 8 | | utf8_danish_ci | utf8 | 203 | | Yes | 8 | | utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 | | utf8_slovak_ci | utf8 | 205 | | Yes | 8 | | utf8_spanish2_ci | utf8 | 206 | | Yes | 8 | | utf8_roman_ci | utf8 | 207 | | Yes | 8 | | utf8_persian_ci | utf8 | 208 | | Yes | 8 | | utf8_esperanto_ci | utf8 | 209 | | Yes | 8 | +--------------------+---------+-----+---------+----------+---------+
utf8_unicode_ci校對(duì)規(guī)則是根據(jù)Unicode校對(duì)規(guī)則算法(UCA)執(zhí)行的, 校對(duì)規(guī)則描述見(jiàn) http://www.unicode.org/reports/tr10/。此校對(duì)規(guī)則使用UCA 4.0.0版本砝碼鍵:http://www.unicode.org/Public/UC一個(gè)/4.0.0/一個(gè)llkeys-4.0.0.txt。(以下討論使用utf8_unicode_ci,但同樣適合ucs2_unicode_ci。)
當(dāng)前,utf8_unicode_ci校對(duì)規(guī)則僅部分支持Unicode校對(duì)規(guī)則算法。一些字符還是不能支持。并且,不能完全支持組合的記號(hào)。這主要影響越南和俄羅斯的一些少數(shù)民族語(yǔ)言,如:Udmurt 、Tatar、Bashkir和Mari。
utf8_unicode_ci的最主要的特色是支持?jǐn)U展,即當(dāng)把一個(gè)字母看作與其它字母組合相等時(shí)。例如,在德語(yǔ)和一些其它語(yǔ)言中‘?’等于‘ss’。
utf8_general_ci是一個(gè)遺留的 校對(duì)規(guī)則,不支持?jǐn)U展。它僅能夠在字符之間進(jìn)行逐個(gè)比較。這意味著utf8_general_ci校對(duì)規(guī)則進(jìn)行的比較速度很快,但是與使用utf8_unicode_ci的 校對(duì)規(guī)則相比,比較正確性較差)。
例如,使用utf8_general_ci和utf8_unicode_ci兩種 校對(duì)規(guī)則下面的比較相等:
? = A
? = O
ü = U
兩種校對(duì)規(guī)則之間的區(qū)別是,對(duì)于utf8_general_ci下面的等式成立:
? = s
但是,對(duì)于utf8_unicode_ci下面等式成立:
? = ss
對(duì)于一種語(yǔ)言?xún)H當(dāng)使用utf8_unicode_ci排序做的不好時(shí),才執(zhí)行與具體語(yǔ)言相關(guān)的utf8字符集 校對(duì)規(guī)則。例如,對(duì)于德語(yǔ)和法語(yǔ),utf8_unicode_ci工作的很好,因此不再需要為這兩種語(yǔ)言創(chuàng)建特殊的utf8校對(duì)規(guī)則。
utf8_general_ci也適用與德語(yǔ)和法語(yǔ),除了‘?’等于‘s’,而不是‘ss’之外。如果你的應(yīng)用能夠接受這些,那么應(yīng)該使用utf8_general_ci,因?yàn)樗俣瓤?。否則,使用utf8_unicode_ci,因?yàn)樗容^準(zhǔn)確。
utf8_swedish_ci,與其它語(yǔ)言相關(guān)的utf8的校對(duì)規(guī)則相似,來(lái)源于utf8_unicode_ci,使用額外的語(yǔ)言規(guī)則。例如,在瑞典語(yǔ)中,以下的關(guān)系式成立,它在德語(yǔ)和法語(yǔ)中不成立:
ü = Y < ?
utf8_spanish_ci和utf8_spanish2_ci校對(duì)規(guī)則分別適用于現(xiàn)代和古典西班牙語(yǔ)。在兩種 校對(duì)規(guī)則中,?’(n-發(fā)音符)是‘n’和‘o’之間的間隔字母。另外,對(duì)于古典西班牙語(yǔ),‘ch’是‘c’和d之間的間隔字母,并且‘ll’是‘l’和‘m’之間的間隔字母。
西歐字符集覆蓋大多數(shù)西歐語(yǔ)言,如法語(yǔ)、西班牙語(yǔ)、加泰羅尼亞語(yǔ)、巴斯克人語(yǔ)、葡萄牙語(yǔ)、意大利語(yǔ)、阿而巴尼亞語(yǔ)、荷蘭語(yǔ)、德語(yǔ)、丹麥語(yǔ)、瑞典語(yǔ)、挪威語(yǔ)、芬蘭語(yǔ)、法羅人語(yǔ)、冰島語(yǔ)、愛(ài)爾蘭語(yǔ)、蘇格蘭語(yǔ)和英語(yǔ)。
·???????? ascii(US ASCII)校對(duì)規(guī)則:
o??????? ascii_bin
o??????? ascii_general_ci( 默認(rèn))
·???????? cp850(DOS西歐) 校對(duì)規(guī)則:
o??????? cp850_bin
o??????? cp850_general_ci( 默認(rèn))
·???????? dec8(DEC 西歐)校對(duì)規(guī)則:
o??????? dec8_bin
o??????? dec8_swedish_ci( 默認(rèn))
·???????? hp8(HP 西歐)校對(duì)規(guī)則:
o??????? hp8_bin
o??????? hp8_english_ci( 默認(rèn))
·???????? latin1(cp1252 西歐)校對(duì)規(guī)則:
o??????? latin1_bin
o??????? latin1_danish_ci
o??????? latin1_general_ci
o??????? latin1_general_cs
o??????? latin1_german1_ci
o??????? latin1_german2_ci
o??????? latin1_spanish_ci
o??????? latin1_swedish_ci( 默認(rèn))
latin1是 默認(rèn)字符集。latin1_swedish_ci是 默認(rèn)的校對(duì)規(guī)則,它用于大多數(shù)MySQL客戶。雖然經(jīng)常說(shuō)它以瑞典/芬蘭 校對(duì)規(guī)則為基礎(chǔ),但瑞典和芬蘭人不同意這種說(shuō)法。
latin1_german1_ci和latin1_german2_ci校對(duì)規(guī)則基于DIN-1和DIN-2標(biāo)準(zhǔn),這里DIN代表Deutsches Institut für Normung(德語(yǔ)等價(jià)于ANSI)。DIN-1被叫做“字典校對(duì)規(guī)則”,DIN-2被叫做“電話簿校對(duì)規(guī)則”。
o??????? latin1_german1_ci(字典)規(guī)則:
o???????????????????? ? = a
o???????????????????? ? = O
o???????????????????? ü = U
o???????????????????? ? = s
o??????? latin1_german2_ci(電話簿)規(guī)則:
o???????????????????? ? = aE
o???????????????????? ? = OE
o???????????????????? ü = UE
o???????????????????? ? = ss
在 latin1_spanish_ci校對(duì)規(guī)則中,‘?’(n-tilde)是‘n’和‘o’之間的間隔字母。
·???????? macroma(Mac西歐) 校對(duì)規(guī)則:
o??????? macroman_bin
o??????? macroman_general_ci( 默認(rèn))
·???????? swe7(7位瑞典語(yǔ)) 校對(duì)規(guī)則:
o??????? swe7_bin
o??????? swe7_swedish_ci( 默認(rèn))
·???????? cp1250(Windows中歐) 校對(duì)規(guī)則:
o??????? cp1250_bin
o??????? cp1250_croatian_ci
o??????? cp1250_czech_cs
o??????? cp1250_general_ci( 默認(rèn))
·???????? cp852(DOS 中歐)校對(duì)規(guī)則:
o??????? cp852_bin
o??????? cp852_general_ci( 默認(rèn))
·???????? keybcs2(DOS Kamenicky Czech-Slovak)校對(duì)規(guī)則:
o??????? keybcs2_bin
o??????? keybcs2_general_ci( 默認(rèn))
·???????? latin2(ISO 8859-2 中歐)校對(duì)規(guī)則:
o??????? latin2_bin
o??????? latin2_croatian_ci
o??????? latin2_czech_cs
o??????? latin2_general_ci( 默認(rèn))
o??????? latin2_hungarian_ci
·???????? macce(Mac 中歐)校對(duì)規(guī)則:
o??????? macce_bin
o??????? macce_general_ci( 默認(rèn))
·???????? armscii8(ARMSCII-8 亞美尼亞語(yǔ))校對(duì)規(guī)則:
o??????? armscii8_bin
o??????? armscii8_general_ci( 默認(rèn))
·???????? cp1256(阿拉伯語(yǔ)Windows) 校對(duì)規(guī)則:
o??????? cp1256_bin
o??????? cp1256_general_ci( 默認(rèn))
·???????? geostd8(GEOSTD8喬治亞語(yǔ)) 校對(duì)規(guī)則:
o??????? geostd8_bin
o??????? geostd8_general_ci( 默認(rèn))
·???????? greek(ISO 8859-7希臘語(yǔ))校對(duì)規(guī)則:
o??????? greek_bin
o??????? greek_general_ci( 默認(rèn))
·???????? hebrew(ISO 8859-8希伯萊語(yǔ))校對(duì)規(guī)則:
o??????? hebrew_bin
o??????? hebrew_general_ci( 默認(rèn))
·???????? latin5(ISO 8859-9 土耳其語(yǔ))校對(duì)規(guī)則:
o??????? latin5_bin
o??????? latin5_turkish_ci( 默認(rèn))
·???????? cp1257(Windows波羅的海) 校對(duì)規(guī)則:
o??????? cp1257_bin
o??????? cp1257_general_ci( 默認(rèn))
o??????? cp1257_lithuanian_ci
·???????? latin7(ISO 8859-13波羅的海)校對(duì)規(guī)則:
o??????? latin7_bin
o??????? latin7_estonian_cs
o??????? latin7_general_ci( 默認(rèn))
o??????? latin7_general_cs
·???????? cp1251(Windows 西里爾)校對(duì)規(guī)則:
o??????? cp1251_bin
o??????? cp1251_bulgarian_ci
o??????? cp1251_general_ci( 默認(rèn))
o??????? cp1251_general_cs
o??????? cp1251_ukrainian_ci
·???????? cp866(DOS 俄語(yǔ))校對(duì)規(guī)則:
o??????? cp866_bin
o??????? cp866_general_ci( 默認(rèn))
·???????? koi8r(KOI8-R Relcom 俄語(yǔ))校對(duì)規(guī)則:
o??????? koi8r_bin
o??????? koi8r_general_ci( 默認(rèn))
·???????? koi8u(KOI8-U 烏克蘭語(yǔ))校對(duì)規(guī)則:
o??????? koi8u_bin
o??????? koi8u_general_ci( 默認(rèn))
我們支持的亞洲字符集包括中文、日語(yǔ)、韓語(yǔ)和泰國(guó)語(yǔ)。這些可能比較復(fù)雜。例如,中文字符集必須考慮到上千種不同的字符。
·???????? big5(Big5傳統(tǒng)中文) 校對(duì)規(guī)則:
o??????? big5_bin
o??????? big5_chinese_ci( 默認(rèn))
·???????? cp932(SJIS Windows日語(yǔ))校對(duì)規(guī)則:
o??????? cp932_bin
o??????? cp932_japanese_ci( 默認(rèn))
·???????? eucjpms(UJIS Windows日語(yǔ))校對(duì)規(guī)則:
o??????? eucjpms_bin
o??????? eucjpms_japanese_ci( 默認(rèn))
·???????? euckr(EUC-KR 韓語(yǔ))校對(duì)規(guī)則:
o??????? euckr_bin
o??????? euckr_korean_ci( 默認(rèn))
·???????? gb2312(GB2312 簡(jiǎn)體中文)校對(duì)規(guī)則:
o??????? gb2312_bin
o??????? gb2312_chinese_ci( 默認(rèn))
·???????? gbk(GBK簡(jiǎn)體中文) 校對(duì)規(guī)則:
o??????? gbk_bin
o??????? gbk_chinese_ci( 默認(rèn))
·???????? sjis(Shift-JIS 日語(yǔ))校對(duì)規(guī)則:
o??????? sjis_bin
o??????? sjis_japanese_ci( 默認(rèn))
·???????? tis620(TIS620 泰國(guó)語(yǔ))校對(duì)規(guī)則:
o??????? tis620_bin
o??????? tis620_thai_ci( 默認(rèn))
·???????? ujis(EUC-JP 日語(yǔ))校對(duì)規(guī)則:
o??????? ujis_bin
o??????? ujis_japanese_ci( 默認(rèn))
為什么需要cp932?
在MySQL中,sjis字符集對(duì)應(yīng)于由IANA定義的Shift_JIS字符集,它支持JIS X0201和JIS X0208字符。(見(jiàn) http://www.iana.org/assignments/character-sets 。)
但是,“SHIFT JIS”作為描述性術(shù)語(yǔ)的含義變得非常含糊不清,并且它常常包括由不同供應(yīng)商定義的Shift_JIS擴(kuò)展部分。
例如,使用在日本Windows環(huán)境中使用的“SHIFT JIS”是Microsoft對(duì)Shift_JIS的Microsoft擴(kuò)展,它的準(zhǔn)確名字是Microsoft Windows Codepage: 932或cp932。除由Shift_JIS支持的字符之外,cp932支持?jǐn)U展字符,如NEC選擇的IBM擴(kuò)展字符和IBM擴(kuò)展字符。
許多日本用戶在使用這些擴(kuò)展字符過(guò)程中碰到過(guò)一些問(wèn)題。這些問(wèn)題是由于以下情況引起的:
·???????? MySQL自動(dòng)轉(zhuǎn)換字符集。
·???????? 字符集通過(guò)Unicode轉(zhuǎn)換(ucs2)。
·???????? sjis字符集不支持這些擴(kuò)展字符轉(zhuǎn)換。
·???????? 從號(hào)稱(chēng)“SHIFT JIS”到Unicode的轉(zhuǎn)換,存在一些轉(zhuǎn)換規(guī)則,并且一些字符轉(zhuǎn)換到Unicode依賴(lài)不同的轉(zhuǎn)換規(guī)則。MySQL僅支持這些轉(zhuǎn)換規(guī)則中的一種(在后面描述)。
MySQLcp932字符集可以解決這些轉(zhuǎn)換問(wèn)題。
因?yàn)?span>MySQL支持字符集轉(zhuǎn)換,將IANA Shift_JIS 和 cp932分離為兩種不同字符集是重要的,因?yàn)樗鼈兲峁┎煌霓D(zhuǎn)換規(guī)則。
cp932與sjis有什么不同?
cp932字符集與sjis存在以下不同點(diǎn):
·???????? cp932支持NEC特殊字符、NEC選擇的IBM擴(kuò)展字符和IBM選擇的字符。
·???????? 一些cp932字符有兩個(gè)不同的編碼點(diǎn),這兩種編碼點(diǎn)轉(zhuǎn)換為相同Unicode編碼點(diǎn)。因此,當(dāng)從Unicode轉(zhuǎn)換回到cp932時(shí),必須選擇一個(gè)編碼點(diǎn)。對(duì)于這種“相互轉(zhuǎn)換”,使用由Microsoft推薦的轉(zhuǎn)換規(guī)則。(見(jiàn) http://support.microsoft.com/kb/170559/EN-US/。)
轉(zhuǎn)換規(guī)則如下:
o??????? 如果字符在JIS X 0208 和NEC特殊字符中同時(shí)存在,使用JIS X 0208 的編碼點(diǎn)。
o??????? 如果字符在NEC特殊字符和IBM選擇的字符中同時(shí)存在,使用NEC特殊字符的編碼點(diǎn)。
o??????? 如果字符在IBM選擇的字符和NEC選擇的IBM擴(kuò)展字符中同時(shí)存在,使用IBM擴(kuò)展字符的編碼點(diǎn)。
關(guān)于cp932字符的Unicode 值的列表顯示信息見(jiàn)http://www.microsoft.com/globaldev/reference/dbcs/932.htm。對(duì)于cp932表中的帶有下面有四位數(shù)字出現(xiàn)的字符的實(shí)體,數(shù)字代表相應(yīng)的Unicode(ucs2)編碼。對(duì)于表中有兩個(gè)帶下劃線的數(shù)字出現(xiàn)的實(shí)體,擇有一個(gè)以那兩個(gè)數(shù)字開(kāi)頭的cp932字符值的范圍。點(diǎn)擊一個(gè)這種表的實(shí)體,將帶你到一個(gè)頁(yè),該頁(yè)顯示每個(gè)以那些數(shù)字開(kāi)頭的cp932字符的Unicode值。
以下連接很重要。它們與下列字符集的編碼相對(duì)應(yīng):
o??????? NEC特殊字符:
http://www.microsoft.com/globaldev/reference/dbcs/932/932_87.htm
o??????? NEC選擇的IBM擴(kuò)展字符:
o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_ED.htm
o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_EE.htm
o??????? IBM選擇的字符:
o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_FA.htm
o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_FB.htm
o???????????????????? http://www.microsoft.com/globaldev/reference/dbcs/932/932_FC.htm
·???????? cp932與eucjpms結(jié)合支持用戶自定義字符的轉(zhuǎn)換,并且解決sjis/ujis轉(zhuǎn)換問(wèn)題。詳細(xì)信息,請(qǐng)參見(jiàn)http://www.opengroup.or.jp/jvc/cde/sjis-euc-e.html。
·???????? 對(duì)于一些字符,與ucs2之間的轉(zhuǎn)換與sjis和cp932之間的轉(zhuǎn)換是不同的。下表舉例說(shuō)明了這些不同。
轉(zhuǎn)換到ucs2:
sjis/cp932值 |
sjis→ ucs2轉(zhuǎn)換 |
cp932 → ucs2轉(zhuǎn)換 |
5C |
005C |
005C |
7E |
007E |
007E |
815C |
2015 |
2015 |
815F |
005C |
FF3C |
8160 |
301C |
FF5E |
8161 |
2016 |
2225 |
817C |
2212 |
FF0D |
8191 |
00a2 |
FFE0 |
8192 |
00a3 |
FFE1 |
81Ca |
00aC |
FFE2 |
從ucs2轉(zhuǎn)換:
ucs2值 |
ucs2 → sjis轉(zhuǎn)換 |
ucs2 → cp932轉(zhuǎn)換 |
005C |
815F |
5C |
007E |
7E |
7E |
00a2 |
8191 |
3F |
00a3 |
8192 |
3F |
00aC |
81Ca |
3F |
2015 |
815C |
815C |
2016 |
8161 |
3F |
2212 |
817C |
3F |
2225 |
3F |
8161 |
301C |
8160 |
3F |
FF0D |
3F |
817C |
FF3C |
3F |
815F |
FF5E |
3F |
8160 |
FFE0 |
3F |
8191 |
FFE1 |
3F |
8192 |
FFE2 |
3F |
81Ca |
這是MySQL參考手冊(cè)的翻譯版本,關(guān)于MySQL參考手冊(cè),請(qǐng)?jiān)L問(wèn)dev.mysql.com。 原始參考手冊(cè)為英文版,與英文版參考手冊(cè)相比,本翻譯版可能不是最新的。