MySQL混合utf8 utf8mb4是否比純utf8mb4更具優(yōu)勢?
問題描述
表太多,僅昵稱和評論設(shè)置utf8mb4,config、tag、router等完全用不到utf8mb4的,依舊utf8這種utf8 utf8mb4混合會對搜索、索引和log記錄有影響嗎?這種方式比純utf8mb4更快速嗎?是否穩(wěn)定?mysqld配置中是否需要修改什么配置、優(yōu)化utf8mb4
PHP代碼DB_CHARSET設(shè)置utf8mb4,會對uft8數(shù)據(jù)有影響嗎?
問題解答
回答1:沒有太多優(yōu)勢因為utf8mb4僅在emoji等特殊字符的時候用到了4個字節(jié)存儲其余時候表現(xiàn)和mysql的utf8字符集是一樣的, 存儲漢字仍然是3個字節(jié)
(因為mysql的utf8字符集的單個字符的最大長度方面的實現(xiàn)是錯誤的, 所以才冒出個utf8mb4字符集出來, 實際上這個utf8mb4就是標準的utf8)
當然, 需要避免使用char, 改用varchar, 因為mysql的char列類型在utf8mb4下, 為了保證所有的數(shù)據(jù)都存的下, char將會占用字符數(shù)*4的字節(jié)數(shù) (mysql的char列類型utf8將占用字符數(shù)*3的字節(jié)數(shù)), 以保證空間分配足夠. 所以建議用可變長度varchar, 以節(jié)省空間. 可變長度消耗的存儲空間為: 實際存儲需要的字節(jié)數(shù)+1或2個字節(jié)表達的長度.
另外對于純英文字符的列, 你可以另外考慮varbinary(可變長度binary)和binary列(適用于固定長度的英文字符, 例如密碼哈希)類型, 性能比varchar略好, 因為這個存儲二進制數(shù)據(jù)
相關(guān)文章:
1. docker網(wǎng)絡(luò)端口映射,沒有方便點的操作方法么?2. golang - 用IDE看docker源碼時的小問題3. docker - 如何修改運行中容器的配置4. docker-machine添加一個已有的docker主機問題5. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個是怎么回事????6. docker鏡像push報錯7. macos - mac下docker如何設(shè)置代理8. MySQL數(shù)據(jù)庫中文亂碼的原因9. android studio總是在processes running好久10. docker不顯示端口映射呢?
