MySQL怎麼存文字不亂碼?

2021-09-22 19:08:20 字數 1683 閱讀 3879

**:

1、只修改字符集(使用預設校驗集)

[email protected]> alter

table t1 convert

tocharacter

set utf8mb4 

2、同時修改表字符集和校驗集

[email protected]> alter

table t1 convert

tocharacter

set utf8mb4 collate utf8mb4_bin; 

3、只修改某列的字符集

[email protected]> alter

table t1 modify c1 varchar(20)  character

set utf8mb4 not

null

default 『』 

4、同時修改某列的字符集和校驗集

[email protected]> alter

table t1 modify c1 varchar(20)  character

set utf8mb4  collate utf8mb4_unicode_ci  not

null

default 『』 

好了,有個字符集為utf8mb4的表中想儲存各類不同字符集的文字,有哪些注意事項億避免亂碼?

如果是通過web介面儲存資料,則建議在browser端、server端全都採用utf8字符集,mysql server端採用utf8/utf8mb4均可(針對大多數文字,其實utf8字符集就足夠儲存的了)。

其中,mysql端的字符集設定比較讓人頭大,涉及到的字符集有好幾個:

可見,涉及到字符集的因素實在太多,因此我們強烈建議各個環節全部採用同一種字符集,避免出現意外狀況。

mysql採用utf8mb4字符集時,儲存文字實際消耗位元組數是由文字內容的位元組數決定的,並非總是需要4位元組,列舉幾種情況:

總結建議

從前端到後端(瀏覽器=>web server=>mysql連線層=>server層=>db層》table層),盡可能使用同一種字符集;

盡可能採用大字符集,也就是優先順序:utf8mb4 > utf8 > gbk > latin1;

採用邏輯備份資料時,切記要不定期進行恢復測試,我以前在這方面栽過一次,教訓慘痛。

附1,關於編碼簡介

為了方便大家,我寫了個簡單的php介面供測試,可以提交一些不常見的漢字,或者emoji表情符,看看是否都能正常顯示。

開發這個介面時,發現釘釘中的個別表情符是由2個4位元組編碼組成的,也就是說乙個emoji表情符,其實是需要8個位元組的。

這個介面最後輸出的格式是:

字串 : 位元組數

比如 "a齒a : 5" ,表示 "a齒a" 這個字串共消耗 5個位元組,因為 "齒" 其實只需要3個位元組來儲存,雖然看起來挺大一坨的。

相應的**如下:

select vchar, length(vchar) as vcharlen 

如果想要寫入4位元組的漢字,可以從龍泉寺提供的字型檔拷貝過來,或者插入emoji表情符。

mysql怎麼不亂碼了

我在 utf8字符集的表怎麼直接轉utf8mb4 一文中介紹了如何把錶字符集由utf8直接轉換成utf8mb4的幾種方法。1 只修改字符集 使用預設校驗集 yejr imysql.com alter table t1 convert to character set utf8mb4 2 同時修改表字...

php擷取中文字串不亂碼的方法

利用php內建方法mb substr擷取中文不亂碼,使用起來非常簡單,大家參考使用吧 gbk編碼擷取示例 如下 str 我是誰 gbk編碼的字串 echo unity3d echo mb substr str,0,2,utf 8 輸出 我a code 中英混合也完全沒有問題。友情提示 使用的時候要注...

如何擷取中英文本串不亂碼

public static void main string args 二分查詢 適合一切特殊字元 gb2312或gbk都可 public static string subgb2312 string source,int target 全英文 乙個英文本母 不分大小寫 和標點 是乙個位元組 str...