关于MySQL字符集和校对集问题
字符集
一、字符集基礎(chǔ)知識(shí)
- 數(shù)據(jù)在計(jì)算機(jī)的最終存儲(chǔ)一定是二進(jìn)制: 但是計(jì)算機(jī)內(nèi)部的存儲(chǔ)都是字節(jié)為基本單位: 最小單位是位(bit)只有兩個(gè)狀態(tài)0或者1. 但是表示的數(shù)據(jù)太少, 計(jì)算機(jī)都是以字節(jié)為操作單位.
- 字符集: 字符的集合, 用戶在計(jì)算機(jī)中所能看到的任何一個(gè)不可被拆分的符號(hào).計(jì)算機(jī)不能存儲(chǔ)圖形符號(hào): 只能使用二進(jìn)制來(lái)代表圖形符號(hào).
- 計(jì)算機(jī)的存儲(chǔ)數(shù)據(jù)的基本單位字節(jié): 一個(gè)字節(jié) = 8位(bits) = 2 ^ 8種狀態(tài) = 256種
- 英文環(huán)境下: 達(dá)不到256中符號(hào): 美國(guó)制定了一套規(guī)則: 規(guī)定了一個(gè)字節(jié)存儲(chǔ)的二進(jìn)制轉(zhuǎn)換成十進(jìn)制之后對(duì)應(yīng)的是什么符號(hào): ASCII: 維護(hù)了字符(英文)與二進(jìn)制的一個(gè)對(duì)應(yīng)關(guān)系.
- 中國(guó)以漢字為符號(hào): 常用的漢字有5K多, 一個(gè)字節(jié)不夠存儲(chǔ): 中國(guó)定制了一個(gè)規(guī)則: 使用2個(gè)字節(jié)來(lái)表示中文字符: 2字節(jié) = 16位 = 256 * 256 = 65536種狀態(tài)(GBK==>GB2312===>big5)
- 世界范圍內(nèi): 除了漢字還有很多其他國(guó)家的符號(hào), 全世界的符號(hào)加起來(lái)超過(guò)了65536種, 使用三個(gè)字節(jié)(unicode ===> utf-8: 可能是2-4個(gè)字節(jié))
二、Mysql的字符集
Mysql是c/s結(jié)構(gòu)軟件: 客戶端 ----> 服務(wù)端(數(shù)據(jù))
數(shù)據(jù)是由客戶端進(jìn)入到服務(wù)端 ---> 服務(wù)端將數(shù)據(jù)顯示給客戶端
如果客戶端的數(shù)據(jù)進(jìn)入到服務(wù)端的時(shí)候,兩端的字符集不一樣: 數(shù)據(jù)沒(méi)有辦法被正常理解(操作中斷)
原因: 客戶端的數(shù)據(jù)的字符集是GBK(一個(gè)漢字兩個(gè)字節(jié)), 但是服務(wù)器端一定不是GBK
查看服務(wù)器所支持的所有字符集: show character set;
查看mysql服務(wù)器默認(rèn)的接收數(shù)據(jù)的字符集: show variables like ‘character_set%’;
客戶端不能插入中文數(shù)據(jù)的原因: 客戶端是GBK, 服務(wù)端認(rèn)為的客戶端是utf8:
客戶端是不能改變(固定是GBK): 修改服務(wù)端認(rèn)為的客戶端的字符集(服務(wù)端支持很多字符集)
再次插入中文數(shù)據(jù)
查看數(shù)據(jù)
原因: 客戶端是GBK,而服務(wù)端認(rèn)為客戶端可以解析的字符集utf8: character_set_results
修改服務(wù)端認(rèn)為的客戶端的解析字符集為GBK
set character_set_results = GBK;凡是使用set character_set_client%修改都是臨時(shí)的(會(huì)話級(jí)別): 當(dāng)前用戶當(dāng)次連接有效(關(guān)閉連接就失效)
有一種快捷方式能夠直接一次性修改多個(gè)服務(wù)器端的默認(rèn)的外部字符集
set names 字符集;校對(duì)集
校對(duì): 本身的比較的意思: 校對(duì)集是一種比較的集合: 當(dāng)數(shù)據(jù)進(jìn)行比較的時(shí)候,會(huì)自動(dòng)使用校對(duì)集來(lái)進(jìn)行驗(yàn)證,從而實(shí)現(xiàn)比較效果.
查看所有校對(duì)集: 一個(gè)字符集會(huì)有多個(gè)校對(duì)集
show collation;校對(duì)集分為三種
- _bin: binary, 二進(jìn)制比較, 區(qū)分大小寫(xiě)
- _cs: case sensitive, 大小寫(xiě)敏感(區(qū)分大小寫(xiě))
- _ci: case insensitive,大小寫(xiě)不敏感(不區(qū)分大小寫(xiě))
比較: 兩張表一張使用_bin一張使用_ci
插入數(shù)據(jù)
比較數(shù)據(jù): 使用order by對(duì)字段進(jìn)行排序: 比較的過(guò)程(校對(duì)集)
Order by 字段名 [asc|desc]; asc是默認(rèn)的: 升序; desc是降序
校對(duì)集必須在表一開(kāi)始的時(shí)候就設(shè)置好: 后期修改無(wú)效(如果表中已經(jīng)有數(shù)據(jù))
轉(zhuǎn)載于:https://www.cnblogs.com/chenjiacheng/p/6522547.html
總結(jié)
以上是生活随笔為你收集整理的关于MySQL字符集和校对集问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ubuntu14.04禁用自动待机保持屏
- 下一篇: mysql 多数据源多主一从复制