zyskm用夢(mèng)想丈量人生,用奔跑丈量激情

          mysql字符集和校對(duì)規(guī)則

          字符集的概念大家都清楚,校對(duì)規(guī)則很多人不了解,一般數(shù)據(jù)庫(kù)開(kāi)發(fā)中也用不到這個(gè)概念,mysql在這方便貌似很先進(jìn),大概介紹一下。
          簡(jiǎn)要說(shuō)明
          字符集和校對(duì)規(guī)則
          字符集是一套符號(hào)和編碼。校對(duì)規(guī)則是在字符集內(nèi)用于比較字符的一套規(guī)則。
          MySql在collation提供較強(qiáng)的支持,oracel在這方面沒(méi)查到相應(yīng)的資料。
          不同字符集有不同的校對(duì)規(guī)則,命名約定:以其相關(guān)的字符集名開(kāi)始,通常包括一個(gè)語(yǔ)言名,并且以_ci(大小寫(xiě)不敏感)、_cs(大小寫(xiě)敏感)或_bin(二元)結(jié)束
          校對(duì)規(guī)則一般分為兩類:
          binary collation,二元法,直接比較字符的編碼,可以認(rèn)為是區(qū)分大小寫(xiě)的,因?yàn)樽址?A'和'a'的編碼顯然不同。
          字符集_語(yǔ)言名,utf8默認(rèn)校對(duì)規(guī)則是utf8_general_ci
          mysql字符集和校對(duì)規(guī)則有4個(gè)級(jí)別的默認(rèn)設(shè)置:服務(wù)器級(jí)、數(shù)據(jù)庫(kù)級(jí)、表級(jí)和連接級(jí)。
          具體來(lái)說(shuō),我們系統(tǒng)使用的是utf8字符集,如果使用utf8_bin校對(duì)規(guī)則執(zhí)行sql查詢時(shí)區(qū)分大小寫(xiě),使用utf8_general_ci 不區(qū)分大小寫(xiě)。不要使用utf8_unicode_ci。
          如create database demo CHARACTER SET utf8; 默認(rèn)校對(duì)規(guī)則是utf8_general_ci 。
           
          Unicode與UTF8
          Unicode只是一個(gè)符號(hào)集,它只規(guī)定了符號(hào)的二進(jìn)制代碼,卻沒(méi)有規(guī)定這個(gè)二進(jìn)制代碼應(yīng)該如何存儲(chǔ).
          UTF8字符集是存儲(chǔ)Unicode數(shù)據(jù)的一種可選方法。 mysql同時(shí)支持另一種實(shí)現(xiàn)ucs2。

          詳細(xì)說(shuō)明

          字符集(charset):是一套符號(hào)和編碼。
          校對(duì)規(guī)則(collation):是在字符集內(nèi)用于比較字符的一套規(guī)則,比如定義'A'<'B'這樣的關(guān)系的規(guī)則。不同collation可以實(shí)現(xiàn)不同的比較規(guī)則,如'A'='a'在有的規(guī)則中成立,而有的不成立;進(jìn)而說(shuō),就是有的規(guī)則區(qū)分大小寫(xiě),而有的無(wú)視。
          每個(gè)字符集有一個(gè)或多個(gè)校對(duì)規(guī)則,并且每個(gè)校對(duì)規(guī)則只能屬于一個(gè)字符集。

          binary collation,二元法,直接比較字符的編碼,可以認(rèn)為是區(qū)分大小寫(xiě)的,因?yàn)樽址?A'和'a'的編碼顯然不同。除此以外,還有更加復(fù)雜的比較規(guī)則,這些規(guī)則在簡(jiǎn)單的二元法之上增加一些額外的規(guī)定,比較就更加復(fù)雜了。
          mysql5.1在字符集和校對(duì)規(guī)則的使用比其它大多數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)超前許多,可以在任何級(jí)別進(jìn)行使用和設(shè)置,為了有效地使用這些功能,你需要了解哪些字符集和 校對(duì)規(guī)則是可用的,怎樣改變默認(rèn)值,以及它們?cè)鯓佑绊懽址僮鞣妥址瘮?shù)的行為。

          校對(duì)規(guī)則一般有這些特征:

           兩個(gè)不同的字符集不能有相同的校對(duì)規(guī)則。
           每個(gè)字符集有一個(gè)默認(rèn)校對(duì)規(guī)則。例如,utf8默認(rèn)校對(duì)規(guī)則是utf8_general_ci。
           存在校對(duì)規(guī)則命名約定:它們以其相關(guān)的字符集名開(kāi)始,通常包括一個(gè)語(yǔ)言名,并且以_ci(大小寫(xiě)不敏感)、_cs(大小寫(xiě)敏感)或_bin(二元)結(jié)束


          確定默認(rèn)字符集和校對(duì)
           字符集和校對(duì)規(guī)則有4個(gè)級(jí)別的默認(rèn)設(shè)置:服務(wù)器級(jí)、數(shù)據(jù)庫(kù)級(jí)、表級(jí)和連接級(jí)。
           數(shù)據(jù)庫(kù)字符集和校對(duì)
           每一個(gè)數(shù)據(jù)庫(kù)有一個(gè)數(shù)據(jù)庫(kù)字符集和一個(gè)數(shù)據(jù)庫(kù)校對(duì)規(guī)則,它不能夠?yàn)榭?。CREATE DATABASE和ALTER DATABASE語(yǔ)句有一個(gè)可選的子句來(lái)指定數(shù)據(jù)庫(kù)字符集和校對(duì)規(guī)則:
           例如:
           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ī)則。
          在SQL語(yǔ)句中使用COLLATE
          •使用COLLATE子句,能夠?yàn)橐粋€(gè)比較覆蓋任何默認(rèn)校對(duì)規(guī)則。COLLATE可以用于多種SQL語(yǔ)句中。
          使用WHERE:
           select * from pro_product where product_code='ABcdefg' collate utf8_general_ci
          Unicode與UTF8
          Unicode只是一個(gè)符號(hào)集,它只規(guī)定了符號(hào)的二進(jìn)制代碼,卻沒(méi)有規(guī)定這個(gè)二進(jìn)制代碼應(yīng)該如何存儲(chǔ).Unicode碼可以采用UCS-2格式直接存儲(chǔ).mysql支持ucs2字符集。
          UTF-8就是在互聯(lián)網(wǎng)上使用最廣的一種unicode的實(shí)現(xiàn)方式。其他實(shí)現(xiàn)方式還包括UTF-16和UTF-32,不過(guò)在互聯(lián)網(wǎng)上基本不用。
          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é)序列。

          posted on 2011-10-24 14:59 zyskm 閱讀(1817) 評(píng)論(3)  編輯  收藏

          評(píng)論

          # re: mysql字符集和校對(duì)規(guī)則 2011-10-24 15:32 發(fā)電機(jī)組

          感謝樓主辛勤,普及了知識(shí),一直想學(xué)習(xí)數(shù)據(jù)庫(kù)方面的知識(shí)  回復(fù)  更多評(píng)論   

          # re: mysql字符集和校對(duì)規(guī)則 2011-10-25 08:23 tbw淘寶

          很有實(shí)用價(jià)值啊   回復(fù)  更多評(píng)論   

          # re: mysql字符集和校對(duì)規(guī)則[未登錄](méi) 2013-04-09 10:00 Mark

          多謝牛主??!  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 黑河市| 阜宁县| 丹阳市| 繁昌县| 富平县| 满城县| 宾阳县| 道孚县| 昌江| 苏尼特左旗| 兰溪市| 高唐县| 淮南市| 泌阳县| 上饶市| 郯城县| 通化县| 黑河市| 江山市| 新竹县| 阿克陶县| 疏附县| 普格县| 临朐县| 汽车| 汉寿县| 佛教| 喜德县| 二手房| 长寿区| 当涂县| 昭平县| 资讯 | 饶平县| 布尔津县| 栖霞市| 祁东县| 礼泉县| 朔州市| 凤城市| 武城县|