最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql中的排序規(guī)則utf8_unicode_ci、utf8_general_ci的區(qū)別總結(jié)

 更新時間:2014年04月08日 09:23:34   投稿:junjie  
Mysql中utf8_general_ci與utf8_unicode_ci有什么區(qū)別呢?在編程語言中,通常用unicode對中文字符做處理,防止出現(xiàn)亂碼,那么在MySQL里,為什么大家都使用utf8_general_ci而不是utf8_unicode_ci呢?

用了這么長時間,發(fā)現(xiàn)自己竟然不知道utf_bin和utf_general_ci這兩者到底有什么區(qū)別。。
ci是 case insensitive, 即 "大小寫不敏感", a 和 A 會在字符判斷中會被當做一樣的;
bin 是二進制, a 和 A 會別區(qū)別對待.
例如你運行:
SELECT * FROM table WHERE txt = 'a'
那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 則可以.
utf8_general_ci 不區(qū)分大小寫,這個你在注冊用戶名和郵箱的時候就要使用。
utf8_general_cs 區(qū)分大小寫,如果用戶名和郵箱用這個 就會照成不良后果
utf8_bin:字符串每個字符串用二進制數(shù)據(jù)編譯存儲。 區(qū)分大小寫,而且可以存二進制的內(nèi)容

一、官方文檔說明
下面摘錄一下Mysql 5.1中文手冊中關(guān)于utf8_unicode_ci與utf8_general_ci的說明:

復(fù)制代碼 代碼如下:

     當前,utf8_unicode_ci校對規(guī)則僅部分支持Unicode校對規(guī)則算法。一些字符還是不能支持。并且,不能完全支持組合的記號。這主要影響越南和俄羅斯的一些少數(shù)民族語言,如:Udmurt 、Tatar、Bashkir和Mari。

     utf8_unicode_ci的最主要的特色是支持擴展,即當把一個字母看作與其它字母組合相等時。例如,在德語和一些其它語言中‘ß'等于‘ss'。

     utf8_general_ci是一個遺留的 校對規(guī)則,不支持擴展。它僅能夠在字符之間進行逐個比較。這意味著utf8_general_ci校對規(guī)則進行的比較速度很快,但是與使用utf8_unicode_ci的 校對規(guī)則相比,比較正確性較差)。

     例如,使用utf8_general_ci和utf8_unicode_ci兩種 校對規(guī)則下面的比較相等:
     Ä = A
     Ö = O
     Ü = U

     兩種校對規(guī)則之間的區(qū)別是,對于utf8_general_ci下面的等式成立:
     ß = s

     但是,對于utf8_unicode_ci下面等式成立:
     ß = ss

     對于一種語言僅當使用utf8_unicode_ci排序做的不好時,才執(zhí)行與具體語言相關(guān)的utf8字符集 校對規(guī)則。例如,對于德語和法語,utf8_unicode_ci工作的很好,因此不再需要為這兩種語言創(chuàng)建特殊的utf8校對規(guī)則。

     utf8_general_ci也適用與德語和法語,除了‘ß'等于‘s',而不是‘ss'之外。如果你的應(yīng)用能夠接受這些,那么應(yīng)該使用utf8_general_ci,因為它速度快。否則,使用utf8_unicode_ci,因為它比較準確。


如果你想使用gb2312編碼,那么建議你使用latin1作為數(shù)據(jù)表的默認字符集,這樣就能直接用中文在命令行工具中插入數(shù)據(jù),并且可以直接顯示出來.而不要使用gb2312或者gbk等字符集,如果擔心查詢排序等問題,可以使用binary屬性約束,例如:
復(fù)制代碼 代碼如下:
create table my_table ( name varchar(20) binary not null default '')type=myisam default charset latin1;

二、簡短總結(jié)
utf8_unicode_ci和utf8_general_ci對中、英文來說沒有實質(zhì)的差別。
utf8_general_ci校對速度快,但準確度稍差。
utf8_unicode_ci準確度高,但校對速度稍慢。

如果你的應(yīng)用有德語、法語或者俄語,請一定使用utf8_unicode_ci。一般用utf8_general_ci就夠了,到現(xiàn)在也沒發(fā)現(xiàn)問題。。。

三、詳細總結(jié)

1、對于一種語言僅當使用utf8_unicode_ci排序做的不好時,才執(zhí)行與具體語言相關(guān)的utf8字符集校對規(guī)則。例如,對于德語和法語,utf8_unicode_ci工作的很好,因此不再需要為這兩種語言創(chuàng)建特殊的utf8校對規(guī)則。
2、utf8_general_ci也適用與德語和法語,除了‘?'等于‘s',而不是‘ss'之外。如果你的應(yīng)用能夠接受這些,那么應(yīng)該使用 utf8_general_ci,因為它速度快。否則,使用utf8_unicode_ci,因為它比較準確。

用一句話概況上面這段話:utf8_unicode_ci比較準確,utf8_general_ci速度比較快。通常情況下 utf8_general_ci的準確性就夠我們用的了,在我看過很多程序源碼后,發(fā)現(xiàn)它們大多數(shù)也用的是utf8_general_ci,所以新建數(shù)據(jù) 庫時一般選用utf8_general_ci就可以了

四、如何在MySQL5.0中使用UTF8
在 my.cnf中增加下列參數(shù)

復(fù)制代碼 代碼如下:

[mysqld]
init_connect='SET NAMES utf8′
default-character-set=utf8
default-collation = utf8_general_ci

執(zhí)行查詢 mysql> show variables; 相關(guān)如下:

復(fù)制代碼 代碼如下:
character_set_client | utf8
character_set_connection | utf8
character_set_database | utf8
character_set_results | utf8
character_set_server | utf8
character_set_system | utf8

collation_connection | utf8_general_ci
collation_database | utf8_general_ci
collation_server | utf8_general_ci

個人見解,對于數(shù)據(jù)庫的使用,utf8 - general 已經(jīng)足夠的準確,并且相較與  utf8 - unicode速度上有優(yōu)勢,固可放心采用之


附1:舊數(shù)據(jù)升級辦法
以原來的字符集為latin1為例,升級成為utf8的字符集。原來的表: old_table (default charset=latin1),新表:new_table(default charset=utf8)。
第一步:導(dǎo)出舊數(shù)據(jù)

復(fù)制代碼 代碼如下:
mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table > old.sql

第二步:轉(zhuǎn)換編碼(類似unix/linux環(huán)境下)
復(fù)制代碼 代碼如下:
iconv -t utf-8 -f gb2312 -c old.sql > new.sql

或者可以去掉 -f 參數(shù),讓iconv自動判斷原來的字符集
復(fù)制代碼 代碼如下:
iconv -t utf-8 -c old.sql > new.sql

在這里,假定原來的數(shù)據(jù)默認是gb2312編碼。
第三步:導(dǎo)入
修改old.sql,在插入/更新語句開始之前,增加一條sql語句: "SET NAMES utf8;",保存。
復(fù)制代碼 代碼如下:
mysql -hlocalhost -uroot my_db < new.sql

大功告成??!

附2:支持查看utf8字符集的MySQL客戶端有
1.) MySQL-Front,據(jù)說這個項目已經(jīng)被MySQL AB勒令停止了,不知為何,如果國內(nèi)還有不少破解版可以下載(不代表我推薦使用破解版 :-P)。
2.) Navicat,另一款非常不錯的MySQL客戶端,漢化版剛出來,還邀請我試用過,總的來說還是不錯的,不過也需要付費。
3.) PhpMyAdmin,開源的php項目,非常好。
4.) Linux下的終端工具(Linux terminal),把終端的字符集設(shè)置為utf8,連接到MySQL之后,執(zhí)行 SET NAMES UTF8; 也能讀寫utf8數(shù)據(jù)了。

相關(guān)文章

  • 解決MySQL數(shù)據(jù)庫鏈接超時報1129錯誤問題

    解決MySQL數(shù)據(jù)庫鏈接超時報1129錯誤問題

    MySQL?為了數(shù)據(jù)庫的安全性默認在鏈接中斷或者錯誤時記錄錯誤鏈接的ip?等信息(host_cache),有點像系統(tǒng)的錯誤日志的一種機制,這篇文章主要介紹了MySQL數(shù)據(jù)庫鏈接超時報1129錯誤解決辦法,需要的朋友可以參考下
    2022-10-10
  • MySQL提示“too?many?connections“錯誤的解決過程

    MySQL提示“too?many?connections“錯誤的解決過程

    當大量的connect之后,就會出現(xiàn)Too many connections的錯誤,下面這篇文章主要給大家介紹了關(guān)于MySQL提示“too?many?connections“錯誤的解決過程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • mysql數(shù)據(jù)存放的位置在哪

    mysql數(shù)據(jù)存放的位置在哪

    在本篇文章里小編給大家分享的是關(guān)于mysql數(shù)據(jù)存放的位置及相關(guān)知識點內(nèi)容,需要的朋友們可以參考下。
    2020-07-07
  • MySQL如何計算連續(xù)登錄天數(shù)

    MySQL如何計算連續(xù)登錄天數(shù)

    這篇文章主要介紹了MySQL如何計算連續(xù)登錄天數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • MySQL表操作插入數(shù)據(jù)insert語句學習(小白入門篇)

    MySQL表操作插入數(shù)據(jù)insert語句學習(小白入門篇)

    這篇文章主要為大家介紹了MySQL表操作插入數(shù)據(jù)insert語句學習小白入門篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • MySQL 8.0新特性 — 管理端口的使用簡介

    MySQL 8.0新特性 — 管理端口的使用簡介

    這篇文章主要介紹了MySQL 8.0新特性 — 管理端口的使用簡介,幫助大家更好的理解和學習使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • 如何解決mysql導(dǎo)入sql文件慢、錯等問題

    如何解決mysql導(dǎo)入sql文件慢、錯等問題

    這篇文章主要介紹了如何解決mysql導(dǎo)入sql文件慢、錯等問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • MySQL COUNT函數(shù)的使用與優(yōu)化

    MySQL COUNT函數(shù)的使用與優(yōu)化

    優(yōu)化COUNT函數(shù)的查詢在 MySQL 中最容易被誤解的話題中能夠排進前10名,我們可以在網(wǎng)上搜索了解更多關(guān)于 COUNT 優(yōu)化的誤解信息。在進行優(yōu)化前,理解 COUNT 到底做了什么很重要。
    2021-05-05
  • MySQL合并查詢結(jié)果的實現(xiàn)

    MySQL合并查詢結(jié)果的實現(xiàn)

    本文主要介紹了MySQL合并查詢結(jié)果的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • mysql 5.7.17 winx64解壓版安裝配置方法圖文教程

    mysql 5.7.17 winx64解壓版安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了mysql 5.7.17 winx64解壓版安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論

沙坪坝区| 明溪县| 子长县| 浮山县| 塔河县| 准格尔旗| 项城市| 潮州市| 金乡县| 乌拉特前旗| 那曲县| 湘西| 全南县| 云南省| 栾城县| 视频| 灌云县| 女性| 县级市| 云阳县| 石泉县| 台安县| 河南省| 淮北市| 甘南县| 上思县| 延吉市| 涡阳县| 河西区| 津市市| 边坝县| 樟树市| 张北县| 安徽省| 商都县| 明光市| 尼玛县| 曲周县| 克什克腾旗| 恩施市| 大方县|