MySQL在5.5.3之后增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來兼容四字節的unicode。好在utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉換。當然,為了節省空間,一般情況下使用utf8也就夠了。
既然utf8能夠存下大部分中文漢字,那為什么還要使用utf8mb4呢? 原來mysql支持的 utf8 編碼最大字符長度為 3 字節,如果遇到 4 字節的寬字符就會插入異常了。三個字節的 UTF-8 最大能編碼的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文種平面(BMP)。也就是說,任何不在基本多文本平面的 Unicode字符,都無法使用 Mysql 的 utf8 字符集存儲。包括 Emoji 表情(Emoji 是一種特殊的 Unicode 編碼,常見于 ios 和 android 手機上),和很多不常用的漢字,以及任何新增的 Unicode 字符等等。
根源就是最初的 UTF-8 格式使用一至六個字節,最大能編碼 31 位字符。最新的 UTF-8 規范只使用一到四個字節,最大能編碼21位,正好能夠表示所有的 17個 Unicode 平面。
utf8 是 Mysql 中的一種字符集,只支持最長三個字節的 UTF-8字符,也就是 Unicode 中的基本多文本平面。
---
在mysql中存在著各種utf8編碼格式,如下(新建數據庫時一般選用utf8_general_ci就可以):
utf8_bin:將字符串中的每一個字符用二進制數據存儲,區分大小寫(在二進制中 ,小寫字母 和大寫字母 不相等.即 a !=A)。
utf8_genera_ci:不區分大小寫,ci為case insensitive的縮寫(insensitive ; 中文解釋: adj. 感覺遲鈍的,對…沒有感覺的),即大小寫不敏感。
utf8_general_cs:區分大小寫,cs為case sensitive的縮寫(sensitive 中文解釋:敏感事件;大小寫敏感;注重大小寫;全字拼寫須符合),即大小寫敏感
utf8_unicode_ci:不能完全支持組合的記號
**應用上的差別**
utf8_general_ci與utf8_unicode_ci
一句話概況:utf8_unicode_ci比較準確,utf8_general_ci速度比較快。
utf8_general_ci與utf8_bin
用utf8_genera_ci沒有區分大小寫,導致這個字段的內容區分大小寫時出問題:
作為密碼時就會出現不合理的方面;
而驗證碼則一般不區分大小寫,所以用這個就合理
utf8_general_cs這個選項一般不用,所以使用utf8_bin區分大小寫
- 序言
- 從業感悟
- 常用名詞
- HTML
- JS
- ES6新特性
- jquery和vue對比
- 徹底理解this
- JQuery添加自定義函數
- js的實現
- 原始值和引用值
- MYSQL
- 簡介
- 術語
- 特點
- 范式
- 數據類型1
- 數據類型2
- 編碼
- 權限管理
- 事務
- mvvc
- 引擎
- MyISAM與InnoDB區別
- 索引類型
- 鎖
- 死鎖
- 分層架構
- 執行計劃
- join原理
- 高可用
- 日志類型
- 分庫分表
- 中間件
- 服務器
- 操作系統
- 信號量 鎖 隊列
- PHP
- composer加載原理
- composer基礎知識
- 自動加載函數
- composer加載代碼
- composer 自動加載
- 內存管理
- PHP執行流程
- cgi,fastCgi,php-fpm
- HTTP
- 錯誤碼
- 跨域請求
- 面試
- 安全
- HTTP劫持
- 設計模式
- 如何正確的使用設計模式
- 單例模式
- 原型模式
- 簡單工廠模式
- 工廠方法模式
- 抽象工廠模式
- 建造者模式
- 設計原則
- 算法
- PHP短標簽