zyskm用夢想丈量人生,用奔跑丈量激情

          mysql字符集和校對規則

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

          詳細說明

          字符集(charset):是一套符號和編碼。
          校對規則(collation):是在字符集內用于比較字符的一套規則,比如定義'A'<'B'這樣的關系的規則。不同collation可以實現不同的比較規則,如'A'='a'在有的規則中成立,而有的不成立;進而說,就是有的規則區分大小寫,而有的無視。
          每個字符集有一個或多個校對規則,并且每個校對規則只能屬于一個字符集。

          binary collation,二元法,直接比較字符的編碼,可以認為是區分大小寫的,因為字符集中'A'和'a'的編碼顯然不同。除此以外,還有更加復雜的比較規則,這些規則在簡單的二元法之上增加一些額外的規定,比較就更加復雜了。
          mysql5.1在字符集和校對規則的使用比其它大多數數據庫管理系統超前許多,可以在任何級別進行使用和設置,為了有效地使用這些功能,你需要了解哪些字符集和 校對規則是可用的,怎樣改變默認值,以及它們怎樣影響字符操作符和字符串函數的行為。

          校對規則一般有這些特征:

           兩個不同的字符集不能有相同的校對規則。
           每個字符集有一個默認校對規則。例如,utf8默認校對規則是utf8_general_ci。
           存在校對規則命名約定:它們以其相關的字符集名開始,通常包括一個語言名,并且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束


          確定默認字符集和校對
           字符集和校對規則有4個級別的默認設置:服務器級、數據庫級、表級和連接級。
           數據庫字符集和校對
           每一個數據庫有一個數據庫字符集和一個數據庫校對規則,它不能夠為空。CREATE DATABASE和ALTER DATABASE語句有一個可選的子句來指定數據庫字符集和校對規則:
           例如:
           CREATE DATABASE db_name    DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
           MySQL這樣選擇數據庫字符集和數據庫校對規則:
          ·         如果指定了CHARACTER SET X和COLLATE Y,那么采用字符集X和校對規則Y。
          ·         如果指定了CHARACTER SET X而沒有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默認校對規則。
          ·         否則,采用服務器字符集和服務器校對規則。
          在SQL語句中使用COLLATE
          •使用COLLATE子句,能夠為一個比較覆蓋任何默認校對規則。COLLATE可以用于多種SQL語句中。
          使用WHERE:
           select * from pro_product where product_code='ABcdefg' collate utf8_general_ci
          Unicode與UTF8
          Unicode只是一個符號集,它只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲.Unicode碼可以采用UCS-2格式直接存儲.mysql支持ucs2字符集。
          UTF-8就是在互聯網上使用最廣的一種unicode的實現方式。其他實現方式還包括UTF-16和UTF-32,不過在互聯網上基本不用。
          UTF8字符集(轉換Unicode表示)是存儲Unicode數據的一種可選方法。它根據 RFC 3629執行。UTF8字符集的思想是不同Unicode字符采用變長字節序列編碼:
          ·         基本拉丁字母、數字和標點符號使用一個字節。
          ·         大多數的歐洲和中東手寫字母適合兩個字節序列:擴展的拉丁字母(包括發音符號、長音符號、重音符號、低音符號和其它音符)、西里爾字母、希臘語、亞美尼亞語、希伯來語、阿拉伯語、敘利亞語和其它語言。
          ·         韓語、中文和日本象形文字使用三個字節序列。

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

          評論

          # re: mysql字符集和校對規則 2011-10-24 15:32 發電機組

          感謝樓主辛勤,普及了知識,一直想學習數據庫方面的知識  回復  更多評論   

          # re: mysql字符集和校對規則 2011-10-25 08:23 tbw淘寶

          很有實用價值啊   回復  更多評論   

          # re: mysql字符集和校對規則[未登錄] 2013-04-09 10:00 Mark

          多謝牛主!!  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 凭祥市| 新宁县| 麻阳| 元朗区| 凭祥市| 牟定县| 张家川| 当雄县| 庄浪县| 马公市| 威信县| 洛扎县| 广水市| 阳西县| 济宁市| 伊川县| 东辽县| 财经| 浠水县| 承德市| 元阳县| 扬州市| 霸州市| 句容市| 渭南市| 阜康市| 集安市| 光泽县| 新平| 牙克石市| 攀枝花市| 沙雅县| 循化| 仁化县| 白河县| 道孚县| 项城市| 崇义县| 麻城市| 阜阳市| 怀仁县|