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

ps:創(chuàng)建數(shù)據(jù)庫不知道選擇什么排序規(guī)則取董,轉(zhuǎn)了篇文章棍苹。

Mysql中utf8_general_ci與utf8_unicode_ci有什么區(qū)別呢?在編程語言中茵汰,通常用unicode對中文字符做處理枢里,防止出現(xiàn)亂碼,那么在MySQL里,為什么大家都使用utf8_general_ci而不是utf8_unicode_ci呢栏豺?
一彬碱、官方文檔說明
下面摘錄一下Mysql 5.1中文手冊中關(guān)于utf8_unicode_ci與utf8_general_ci的說明:

代碼如下:
當(dāng)前,utf8_unicode_ci校對規(guī)則僅部分支持Unicode校對規(guī)則算法奥洼。一些字符還是不能支持巷疼。并且,不能完全支持組合的記號(hào)溉卓。這主要影響越南和俄羅斯的一些少數(shù)民族語言皮迟,如:Udmurt 、Tatar桑寨、Bashkir和Mari伏尼。

 utf8_unicode_ci的最主要的特色是支持?jǐn)U展,即當(dāng)把一個(gè)字母看作與其它字母組合相等時(shí)尉尾。例如爆阶,在德語和一些其它語言中‘?'等于‘ss'。

 utf8_general_ci是一個(gè)遺留的 校對規(guī)則沙咏,不支持?jǐn)U展辨图。它僅能夠在字符之間進(jìn)行逐個(gè)比較。這意味著utf8_general_ci校對規(guī)則進(jìn)行的比較速度很快肢藐,但是與使用utf8_unicode_ci的 校對規(guī)則相比故河,比較正確性較差)。

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

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

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

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

 utf8_general_ci也適用與德語和法語蘸拔,除了‘?'等于‘s'师郑,而不是‘ss'之外。如果你的應(yīng)用能夠接受這些调窍,那么應(yīng)該使用utf8_general_ci宝冕,因?yàn)樗俣瓤臁7駝t陨晶,使用utf8_unicode_ci猬仁,因?yàn)樗容^準(zhǔn)確帝璧。

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

二、簡短總結(jié)
utf8_unicode_ci和utf8_general_ci對中湿刽、英文來說沒有實(shí)質(zhì)的差別的烁。
utf8_general_ci校對速度快,但準(zhǔn)確度稍差诈闺。
utf8_unicode_ci準(zhǔn)確度高渴庆,但校對速度稍慢。

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

三计呈、詳細(xì)總結(jié)

1、對于一種語言僅當(dāng)使用utf8_unicode_ci排序做的不好時(shí)征唬,才執(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眠副,因?yàn)樗俣瓤旎小7駝t,使用utf8_unicode_ci囱怕,因?yàn)樗容^準(zhǔn)確霍弹。

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

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

代碼如下:
[mysqld]
init_connect='SET NAMES utf8′
default-character-set=utf8
default-collation = utf8_general_ci

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

代碼如下: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

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

附1:舊數(shù)據(jù)升級(jí)辦法
以原來的字符集為latin1為例,升級(jí)成為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)境下)
代碼如下:iconv -t utf-8 -f gb2312 -c old.sql > new.sql
或者可以去掉 -f 參數(shù)他嫡,讓iconv自動(dòng)判斷原來的字符集
代碼如下:iconv -t utf-8 -c old.sql > new.sql
在這里番官,假定原來的數(shù)據(jù)默認(rèn)是gb2312編碼。
第三步:導(dǎo)入
修改old.sql钢属,在插入/更新語句開始之前徘熔,增加一條sql語句: "SET NAMES utf8;",保存淆党。
代碼如下:mysql -hlocalhost -uroot my_db < new.sql
大功告成=辍!

附2:支持查看utf8字符集的MySQL客戶端有
1.) MySQL-Front宁否,據(jù)說這個(gè)項(xiàng)目已經(jīng)被MySQL AB勒令停止了窒升,不知為何,如果國內(nèi)還有不少破解版可以下載(不代表我推薦使用破解版 :-P)慕匠。
2.) Navicat饱须,另一款非常不錯(cuò)的MySQL客戶端,漢化版剛出來台谊,還邀請我試用過蓉媳,總的來說還是不錯(cuò)的,不過也需要付費(fèi)锅铅。
3.) PhpMyAdmin酪呻,開源的php項(xiàng)目,非常好盐须。
4.) Linux下的終端工具(Linux terminal)玩荠,把終端的字符集設(shè)置為utf8,連接到MySQL之后贼邓,執(zhí)行 SET NAMES UTF8; 也能讀寫utf8數(shù)據(jù)了阶冈。
轉(zhuǎn):http://www.3lian.com/edu/2014/04-09/140079.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塑径,隨后出現(xiàn)的幾起案子女坑,更是在濱河造成了極大的恐慌,老刑警劉巖统舀,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匆骗,死亡現(xiàn)場離奇詭異劳景,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)碉就,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門枢泰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铝噩,你說我怎么就攤上這事衡蚂。” “怎么了骏庸?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵毛甲,是天一觀的道長。 經(jīng)常有香客問我具被,道長玻募,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任一姿,我火速辦了婚禮七咧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叮叹。我一直安慰自己艾栋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布蛉顽。 她就那樣靜靜地躺著蝗砾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天竖席,我揣著相機(jī)與錄音,去河邊找鬼扣猫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛翘地,可吹牛的內(nèi)容都是我干的申尤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼子眶,長吁一口氣:“原來是場噩夢啊……” “哼瀑凝!你這毒婦竟也來了序芦?” 一聲冷哼從身側(cè)響起臭杰,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谚中,沒想到半個(gè)月后渴杆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寥枝,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年磁奖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了囊拜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡比搭,死狀恐怖冠跷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情身诺,我是刑警寧澤蜜托,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站霉赡,受9級(jí)特大地震影響橄务,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜穴亏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一蜂挪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗓化,春花似錦棠涮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至隅津,卻和暖如春诬垂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伦仍。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來泰國打工结窘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人充蓝。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓隧枫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谓苟。 傳聞我的和親對象是個(gè)殘疾皇子官脓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 前段時(shí)間公司內(nèi)部博客上凱哥分享了一篇關(guān)于mysql字符集編碼的文章,之前我對mysql字符集一塊基本沒有深究過,看...
    __七把刀__閱讀 6,419評(píng)論 14 18
  • 1、引言 數(shù)據(jù)庫設(shè)計(jì)過程中表涝焙、字段等的命名規(guī)范也算是設(shè)計(jì)規(guī)范的一部分卑笨,不過設(shè)計(jì)規(guī)范更多的是為了確保數(shù)據(jù)庫設(shè)計(jì)的合理...
    SnowflakeCloud閱讀 40,961評(píng)論 0 48
  • From: 博客園 Johney最近,在項(xiàng)目組使用的mysql數(shù)據(jù)庫中仑撞,插入數(shù)據(jù)出現(xiàn)亂碼赤兴,關(guān)于這個(gè)問題做了下總結(jié)...
    zheng7閱讀 949評(píng)論 1 2
  • 傅女士妖滔,6號(hào)自保!47年生桶良!腰痛座舍,膝蓋痛,右側(cè)肩頸痛陨帆,睡眠質(zhì)量不好曲秉!用細(xì)胞修復(fù)液做全身能量平衡按摩!從下午三點(diǎn)到五...
    竺子閱讀 216評(píng)論 0 0
  • 在半導(dǎo)體行業(yè)從業(yè)過五年疲牵,半導(dǎo)體的設(shè)備工業(yè)自動(dòng)化15年前已經(jīng)達(dá)到岸浑,一條晶圓生產(chǎn)線中需要1名操作員,一條封裝線只需要4...
    劉旗閱讀 260評(píng)論 0 0