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