當前位置:
首頁 > 最新 > UTF8字符集的表怎麼直接轉UTF8MB4?

UTF8字符集的表怎麼直接轉UTF8MB4?

導讀

我的小密圈裡有讀者提到一個線上庫是utf8字符集,想問怎樣將其轉成utf8mb4

問題

我的小密圈「「老葉茶館」鐵粉圈」上有讀者提問:金** 提問:葉老師,有一個MySQL庫是utf8的,不大,4g多,怎樣轉成utf8mb4.可以有一定的停機時間。

解讀

utf8是utf8mb4的子集,一般情況下,應該是可以直接修改表字符集的。

修改字符集的幾種方法 方法一

修改表默認字符集

mysql> alter table j1 default character set utf8mb4;

隨後再修改所有字元型列的字符集

mysql> alter table j1 modify name varchar(20) character set utf8mb4 not null default ;

方法二

也是執行ALTER TABLE來修改,但有更簡單的解法

mysql> alter table j1 convert to character set utf8mb4;

備註

上面兩種方法,其實是有區別的。

採用方法一,如果遇到某個列字符集轉換完後位元組數超限了,會提示錯誤。

而採用方法二,如果遇到某個列字符集轉換完後位元組數超限了,則會將這個列數據類型轉換成可以容納更大長度的類型,比如從 TEXT 轉成 LONGTEXT 等。

方法三

如果不放心,可以用mysqldump邏輯備份方式,用utf8mb4字符集把數據備份出來,新建表,恢復回去,應該也可以的。

結論

想從小位元組數(2位元組/3位元組)字符集(gb2312、utf8)轉換到大位元組數(4位元組)字符集(utf8mb4),是可以直接轉換的。

相反,想從大位元組數字符集轉成小的,則會有風險,例如字元串被截斷等。

案例測試 yejr@imysql.com [test]>set names gb2312;yejr@imysql.com [test]>show create table t1;| t1 | CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `name` char(2) NOT NULL DEFAULT ) ENGINE=InnoDB DEFAULT CHARSET=gb2312yejr@imysql.com [test]>select * from t1;+------+--------+| id | name |+------+--------+| 232 | 你我 || 47 | 你我 || 3 | 你我 || 5 | 你我 || 8 | 你我 || -1 | 你我 |+------+--------+//直接修改字符集yejr@imysql.com [test]>alter table t1 convert to character set utf8mb4;//把客戶端工具的終端字符集從gb2312改成utf8//同時修改mysql客戶端字符集,重新讀取數據yejr@imysql.com [test]>set names utf8mb4;yejr@imysql.com [test]>select * from t1;+------+--------+| id | name |+------+--------+| 232 | 你我 || 47 | 你我 || 3 | 你我 || 5 | 你我 || 8 | 你我 || -1 | 你我 |+------+--------+

可以看到,是可以直接轉換的。

當然了,生產環境中,如果也想這麼做,最好還是先在測試環境進行更嚴格的測試演練,確保無誤後再實施。

參考

https://dev.mysql.com/doc/refman/5.7/en/alter-table.html#alter-table-character-set

https://dev.mysql.com/doc/refman/5.7/en/charset-unicode-conversion.html

http://imysql.com/2013/11/19/problem-about-mysql-date-function-charset.shtml

http://imysql.com/2013/10/29/misunderstand-about-charset-handshake.shtml

http://imysql.com/charset_tips

http://imysql.com/2007_12_16_mysql_faq_how_to_change_default_charset

http://imysql.com/2007_12_23_mysql_faq_how_to_set_default_table_charset

http://imysql.com/2007_12_25_mysql_faq_how_to_set_default_field_charset

http://imysql.com/node/733

知識無界限,不再加原創

喜歡就轉發,鐵粉加密圈

好鐵觀音盡在

「老葉茶館」

http://yejinrong.com

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 搜狐新聞 的精彩文章:

珠寶雍容華貴 美人古樸凝重
組裝需藉助放大鏡!納米無人機「鷸鳥」交付美軍
林青霞跟閨蜜牽手逛街 穿著隨性也搶鏡
中國母親的三大悲哀:全心投入,全面參與,卻無法全身而退!
虛胖、實胖3天減肥食譜,讓你3天減5斤!

TAG:搜狐新聞 |

您可能感興趣

記住,永遠不要在MySQL中使用「utf8」
mysql更改資料庫編碼問題(utf8)