UTF8字符集的表怎么直接转UTF8MB4?
来源:互联网 发布:移动网络电视好不好 编辑:程序博客网 时间:2024/05/14 16:31
导读
我的小密圈里有读者提到一个线上库是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
- UTF8字符集的表怎么直接转UTF8MB4?
- mysql改变表的编码字符集,将utf8改为utf8mb4
- Mysql中,utf8mb4与utf8字符集的区别
- MySQL中字符集 utf8mb4与utf8的区别
- 怎么把pdf直接转换成word
- 将视图直接转换成表的SQL语句
- 更改mysql字符集utf8至utf8mb4
- MySQL将utf8字符集改为utf8mb4
- utf8mb4与utf8的区别
- utf8mb4与utf8的区别
- utf8mb4与utf8的区别
- 老婆游世博日记(直接转的)
- 十六进制直接转换成颜色的方法
- 直接转的一篇译文,非原创
- mysql中database库和tables表中字符集 utf8 和utf8mb4 有什么区别?
- ppt格式怎么直接转换成pdf文件
- MySQL数据库字符集由utf8修改为utf8mb4一例
- mysql中字符集 utf8 和utf8mb4 有什么区别?
- MySQL 5.7临时表空间怎么玩才能不掉坑里
- FAQ系列
- 周四见 |《怎么学习MySQL源码》公开课分享
- 《 金融级MySQL高可用方案选型》公开课内容分享
- 剧透版:周四见 |《 金融级MySQL高可用方案选型》
- UTF8字符集的表怎么直接转UTF8MB4?
- 知数堂干货资料合集(2017年上半年总结篇)
- 周四见 |《 金融级MySQL高可用方案选型》公开课分享
- 【硬件维护】多种日志轻松定位硬件故障
- 听说高考有捷径,职场呢?
- SQL优化案例精彩连载(一)
- html
- 硬盘挂了,没同型号备盘,不用哭
- 我决定把这两封邮件曝光!