MySQL混合utf8 utf8mb4是否比純utf8mb4更具優(yōu)勢(shì)?
問(wèn)題描述
表太多,僅昵稱和評(píng)論設(shè)置utf8mb4,config、tag、router等完全用不到utf8mb4的,依舊utf8這種utf8 utf8mb4混合會(huì)對(duì)搜索、索引和log記錄有影響嗎?這種方式比純utf8mb4更快速嗎?是否穩(wěn)定?mysqld配置中是否需要修改什么配置、優(yōu)化utf8mb4
PHP代碼DB_CHARSET設(shè)置utf8mb4,會(huì)對(duì)uft8數(shù)據(jù)有影響嗎?
問(wèn)題解答
回答1:沒(méi)有太多優(yōu)勢(shì)因?yàn)閡tf8mb4僅在emoji等特殊字符的時(shí)候用到了4個(gè)字節(jié)存儲(chǔ)其余時(shí)候表現(xiàn)和mysql的utf8字符集是一樣的, 存儲(chǔ)漢字仍然是3個(gè)字節(jié)
(因?yàn)閙ysql的utf8字符集的單個(gè)字符的最大長(zhǎng)度方面的實(shí)現(xiàn)是錯(cuò)誤的, 所以才冒出個(gè)utf8mb4字符集出來(lái), 實(shí)際上這個(gè)utf8mb4就是標(biāo)準(zhǔn)的utf8)
當(dāng)然, 需要避免使用char, 改用varchar, 因?yàn)閙ysql的char列類型在utf8mb4下, 為了保證所有的數(shù)據(jù)都存的下, char將會(huì)占用字符數(shù)*4的字節(jié)數(shù) (mysql的char列類型utf8將占用字符數(shù)*3的字節(jié)數(shù)), 以保證空間分配足夠. 所以建議用可變長(zhǎng)度varchar, 以節(jié)省空間. 可變長(zhǎng)度消耗的存儲(chǔ)空間為: 實(shí)際存儲(chǔ)需要的字節(jié)數(shù)+1或2個(gè)字節(jié)表達(dá)的長(zhǎng)度.
另外對(duì)于純英文字符的列, 你可以另外考慮varbinary(可變長(zhǎng)度binary)和binary列(適用于固定長(zhǎng)度的英文字符, 例如密碼哈希)類型, 性能比varchar略好, 因?yàn)檫@個(gè)存儲(chǔ)二進(jìn)制數(shù)據(jù)
相關(guān)文章:
1. MySQL的聯(lián)合查詢[union]有什么實(shí)際的用處2. 數(shù)組排序,并把排序后的值存入到新數(shù)組中3. mysql 遠(yuǎn)程連接出錯(cuò)10060,我已經(jīng)設(shè)置了任意主機(jī)了。。。4. win10 python3.5 matplotlib使用報(bào)錯(cuò)5. 默認(rèn)輸出類型為json,如何輸出html6. python - pymysql建立連接出錯(cuò)7. mysql怎么表示兩個(gè)字段的差8. python的正則怎么同時(shí)匹配兩個(gè)不同結(jié)果?9. PHP訂單派單系統(tǒng)10. php多任務(wù)倒計(jì)時(shí)求助
