UTF8字符集的表怎么直接转UTF8MB4?

解读

utf8是utf8mb4的子集,一般情况下,应该是可以直接修改表字符集的。

修改字符集的几种方法

方法一

  • 修改表默认字符集

  • 随后再修改所有字符型列的字符集

方法二

也是执行ALTER TABLE来修改,但有更简单的解法

备注
上面两种方法,其实是有区别的。

  • 采用方法一,如果遇到某个列字符集转换完后字节数超限了,会提示错误。

  • 而采用方法二,如果遇到某个列字符集转换完后字节数超限了,则会将这个列数据类型转换成可以容纳更大长度的类型,比如从 TEXT 转成 LONGTEXT 等。

方法三

如果不放心,可以用mysqldump逻辑备份方式,用utf8mb4字符集把数据备份出来,新建表,恢复回去,应该也可以的。

结论

想从小字节数(2字节/3字节)字符集(gb2312、utf8)转换到大字节数(4字节)字符集(utf8mb4),是可以直接转换的。
相反,想从大字节数字符集转成小的,则会有风险,例如字符串被截断等。

案例测试

可以看到,是可以直接转换的。

当然了,生产环境中,如果也想这么做,最好还是先在测试环境进行更严格的测试演练,确保无误后再实施。

参考

  • 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

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">