表格太多,僅暱稱和評論設定utf8mb4,config、tag、router等完全用不到utf8mb4的,依舊utf8這種utf8 utf8mb4混合會對搜尋、索引和log記錄有影響嗎? 這種方式比純utf8mb4更快嗎?是否穩定? mysqld配置中是否需要修改什麼配置、最佳化utf8mb4
PHP代碼DB_CHARSET設定utf8mb4,會對uft8資料有影響嗎?
沒有太多優勢因為utf8mb4僅在emoji等特殊字符的時候用到了4個字節存儲其餘時候表現和mysql的utf8字符集是一樣的, 存儲漢字仍然是3個字節
(因為mysql的utf8字符集的單個字符的最大長度方面的實現是錯誤的, 所以才冒出個utf8mb4字符集出來, 實際上這個utf8mb4就是標準的utf8)
當然, 需要避免使用char, 改用varchar, 因為mysql的char列類型在utf8mb4下, 為了保證所有的資料都存的下, char將會佔用字元數*4的位元組數(mysql的char列類型utf8將佔用字元數*3的位元組數), 以確保空間分配足夠. 所以建議用可變長度varchar, 以節省空間. 可變長度消耗的儲存空間為: 實際儲存需要的位元組數+1或2個位元組表達的長度.
另外對於純英文字符的列, 你可以另外考慮varbinary(可變長度binary)和binary列(適用於固定長度的英文字符, 例如密碼哈希)類型, 性能比varchar略好, 因為這個存儲二進制數據
沒有太多優勢
因為utf8mb4僅在emoji等特殊字符的時候用到了4個字節存儲
其餘時候表現和mysql的utf8字符集是一樣的, 存儲漢字仍然是3個字節
(因為mysql的utf8字符集的單個字符的最大長度方面的實現是錯誤的, 所以才冒出個utf8mb4字符集出來, 實際上這個utf8mb4就是標準的utf8)
當然, 需要避免使用char, 改用varchar, 因為mysql的char列類型在utf8mb4下, 為了保證所有的資料都存的下, char將會佔用字元數*4的位元組數(mysql的char列類型utf8將佔用字元數*3的位元組數), 以確保空間分配足夠. 所以建議用可變長度varchar, 以節省空間. 可變長度消耗的儲存空間為: 實際儲存需要的位元組數+1或2個位元組表達的長度.
另外對於純英文字符的列, 你可以另外考慮varbinary(可變長度binary)和binary列(適用於固定長度的英文字符, 例如密碼哈希)類型, 性能比varchar略好, 因為這個存儲二進制數據