MySQL混合utf8 utf8mb4是否比純utf8mb4更具優(yōu)勢(shì)?
問(wèn)題描述
表太多,僅昵稱(chēng)和評(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列類(lèi)型在utf8mb4下, 為了保證所有的數(shù)據(jù)都存的下, char將會(huì)占用字符數(shù)*4的字節(jié)數(shù) (mysql的char列類(lèi)型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)度的英文字符, 例如密碼哈希)類(lèi)型, 性能比varchar略好, 因?yàn)檫@個(gè)存儲(chǔ)二進(jìn)制數(shù)據(jù)
相關(guān)文章:
1. php工具中的mysql還是5.1以下的,請(qǐng)問(wèn)如何才能升級(jí)到5.1以上?2. java - 根據(jù)月份查詢多個(gè)表里的內(nèi)容怎么實(shí)現(xiàn)好?3. 前端 - 關(guān)于img父容器的高度會(huì)比img的高度多幾像素的問(wèn)題?4. javascript - 在 model里定義的 引用表模型時(shí),model為undefined。5. atom開(kāi)始輸入!然后按tab只有空格出現(xiàn)沒(méi)有html格式出現(xiàn)6. css3 - 這個(gè)右下角折角用css怎么畫(huà)出來(lái)?7. css3 - 沒(méi)明白盒子的height隨width的變化這段css是怎樣實(shí)現(xiàn)的?8. python3.x - c++調(diào)用python39. javascript - 移動(dòng)端自適應(yīng)10. ios - 類(lèi)似微博首頁(yè),一張圖的時(shí)候是如何確定圖大小的?
