整理 MySQL 8.0 文档时发现一个变更:

默认字符集由 latin1 变为 utf8mb4。想起以前整理过字符集转换文档,升级到 MySQL 8.0 后大概率会有字符集转换的需求,在此正好分享一下。

当时的需求背景是:

部分系统使用的字符集是 utf8,但 utf8 最多只能存 3 字节长度的字符,不能存放 4 字节的生僻字或者表情符号,因此打算迁移到 utf8mb4。迁移方案一1. 准备新的数据库实例,修改以下参数:

[mysqld]

## Character Settings

init_connect='SET NAMES utf8mb4'

#连接建立时执行设置的语句,对super权限用户无效

character-set-server = utf8mb4

collation-server = utf8mb4_general_ci

#设置服务端校验规则,如果字符串需要区分大小写,设置为utf8mb4_bin

skip-character-set-client-handshake

#忽略应用连接自己设置的字符编码,保持与全局设置一致

## Innodb Settings

innodb_file_format = Barracuda

innodb_file_format_max = Barracuda

innodb_file_per_table = 1

innodb_large_prefix = ON

#允许索引的最大字节数为3072(不开启则最大为767字节,对于类似varchar(255)字段的索引会有问题,因为255*4大于767)

2. 停止应用,观察,确认不再有数据写入

可通过 show master status 观察 GTID 或者 binlog position,没有变化则没有写入。

3. 导出数据

先导出表结构:

mysqldump -u -p --no-data --default-character-set=utf8mb4 --single-transaction --set-gtid-purged=OFF --databases testdb > /backup/testdb.sql

后导出数据:

mysqldump -u -p --no-create-info --master-data=2 --flush-logs --routines --events --triggers --default-character-set=utf8mb4 --single-transaction --set-gtid-purged=OFF --database testdb > /backup/testdata.sql

4. 修改建表语句

修改导出的表结构文件,将表、列定义中的 utf8 改为 utf8mb4

5. 导入数据

先导入表结构:

mysql -u -p testdb < /backup/testdb.sql

后导入数据:

mysql -u -p testdb < /backup/testdata.sql

6. 建用户

查出旧环境的数据库用户,在新数据库中创建

7. 修改新数据库端口,启动应用进行测试

关闭旧数据库,修改新数据库端口重启,启动应用迁移方案二1. 修改表的字符编码会锁表,建议先停止应用

2. 停止 mysql,备份数据目录(也可以其他方式进行全备)

3. 修改配置文件,重启数据库

[mysqld]

## Character Settings

init_connect='SET NAMES utf8mb4'

#连接建立时执行设置的语句,对super权限用户无效

character-set-server = utf8mb4

collation-server = utf8mb4_general_ci

#设置服务端校验规则,如果字符串需要区分大小写,设置为utf8mb4_bin

skip-character-set-client-handshake

#忽略应用连接自己设置的字符编码,保持与全局设置一致

## Innodb Settings

innodb_file_format = Barracuda

innodb_file_format_max = Barracuda

innodb_file_per_table = 1

innodb_large_prefix = ON

#允许索引的最大字节数为3072(不开启则最大为767字节,对于类似varchar(255) 字段的索引会有问题,因为255*4大于767)

4. 查看所有表结构,包括字段、修改库和表结构,如果字段有定义字符编码,也需要修改字段属性,sql 语句如下:修改表的字符集:

alter table t convert to character set utf8mb4;

影响:拷贝全表,速度慢,会加锁,阻塞写操作

修改字段的字符集(utf8mb4 每字符占 4 字节,注意字段类型的最大字节数与字符长度关系):

alter table t modify a char CHARACTER SET utf8mb4;

影响:拷贝全表,速度慢,会加锁,阻塞写操作

修改 database 的字符集:

alter database sbtest CHARACTER SET utf8mb4;

影响:只需修改元数据,速度很快5. 修改 JDBC url characterEncoding=utf-8

社区近期动态

No.1

Mycat 问题免费诊断

诊断范围支持:

Mycat 的故障诊断、源码分析、性能优化

服务支持渠道:

技术交流群,进群后可提问

QQ群(669663113)

社区通道,邮件&电话

osc@actionsky.com

现场拜访,线下实地,1天免费拜访

关注“爱可生开源社区”公众号,回复关键字“Mycat”,获取活动详情。

No.2

社区技术内容征稿

征稿内容:

格式:.md/.doc/.txt

主题:MySQL、分布式中间件DBLE、数据传输组件DTLE相关技术内容

要求:原创且未发布过

奖励:作者署名;200元京东E卡+社区周边

投稿方式:

邮箱:osc@actionsky.com

格式:[投稿]姓名+文章标题

以附件形式发送,正文需注明姓名、手机号、微信号,以便小编及时联系

喜欢点"分享",不行就"在看"

eclipse设置utf8编码_技术分享 | MySQL 8.0:字符集从 utf8 转换成 utf8mb4相关推荐

  1. mysql 如何设置延迟启动_技术分享 | MySQL 网络延时参数设置建议

    作者:毛思平 工作11年,从事数据库工作7年,主要在金融行业.主要是做oracle,mysql.现在在农行软开中心主要做数据库应用方面的研究. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授 ...

  2. 发布json数据_技术分享 | MySQL 8.0.17 GA 发布!

    昨日 MySQL 官网正式发布 8.0.17 / 5.7.27 / 5.6.45 三个(维护)版本,距离上一个 GA 版本(8.0.16)发布时隔仅 88 天! MySQL 各开发团队的博客网站,同一 ...

  3. angular select设置默认选中_技术分享 | Charset 和 Collat??ion 设置对 MySQL 性能的影响...

    原创: 管长龙 译 作者:Vadim Tkachenko 通过测试,比较 MySQL 5.7.25 和 MySQL 8.0.15 之间字符集和校验规则的设置所带来的性能差异.测试环境 系统 | Ubu ...

  4. MySQL8.0 物理克隆接口_技术实战 MySQL 8.0.17 克隆插件分享-爱可生

    原标题:技术实战 MySQL 8.0.17 克隆插件分享-爱可生 背景 很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮.前者加入了组复制(Group Replication) ...

  5. mysql优化说出九条_技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢?

    原标题:技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢? 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 ...

  6. mysql 客户端_技术分享 | MySQL 客户端连不上(1045 错误)原因全解析

    作者:Carlos Tutte.Marcos Albe 翻译:管长龙 在我们学习 MySQL 或从事 MySQL DBA 工作期间,时常会遇到:"我尝试连接到 MySQL 并且收到1045 ...

  7. mysql内连接简写_技术分享 | MySQL 的 join_buffer_size 在内连接上的应用

    本文详细介绍了 MySQL 参数 join_buffer_size 在 INNER JOIN 场景的使用,OUTER JOIN 不包含.在讨论这个 BUFFER 之前,我们先了解下 MySQL 的 I ...

  8. left join 索引失效无条件_技术分享 | MySQL 优化:JOIN 优化实践

    近期刚好学习了丁奇老师的<MySQL 实战 45 讲>中的 join 优化相关知识,又刚刚好碰上了一个非常切合的 join 查询需要优化,分析过程有些曲折,记录下来留作笔记.问题 SQL ...

  9. mysql5驱动_技术分享 | MySQL 8 和 MySQL 5.7 在小型设备的内存消耗分析

    原创: 管长龙 译 作者:Peter Zaitsev 虽然我们经常在较大规模的系统上运行 MySQL ,但我们常常在最小的云实例上运行MySQL,或者只在我们的笔记本电脑上运行它.在这些情况下,MyS ...

  10. mysql 行锁 超时_技术分享 | MySQL 行锁超时排查方法优化

    作者:xuty 本文来源:原创投稿 * 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.大纲 #### 20191219 10:10:10,234 | com.ali ...

最新文章

  1. LATEX 在section层级目录上也加上虚线
  2. 搭建WEB服务详解(二)
  3. 神策数据全面支持苹果 ASA,全域归因方案再升级
  4. jqgrid学习(三)
  5. API网关正在经历身份危机
  6. 网页爬虫的设计与实现(Java版)
  7. 一些会遗忘的代码属性
  8. CMD应用 qtp/winshell/cmd的交互
  9. movingpandas时空数据分析——旧金山出租车轨迹数据集处理
  10. 改版更新后的领英职场不能搜索开发客户怎么办?两种方法加一个工具解决
  11. c语言程序设计电子英汉词典,C语言程序设计课程设计-电子英汉词典设计.doc
  12. 2019第十四届中国竞争情报国际年会将于4月在上海召开
  13. 图文讲解Python数据可视化神器
  14. DNS 文件传输协议
  15. 超级表格终于上线「文件转让」功能!文件调动容易解决!
  16. 正则表达式及bash脚本(一)
  17. Impala的命令COMPUTE STATS
  18. 老调重弹之Java引用类型
  19. 援非洲,清华曹丰泽:我要证明,理想主义的路是走得通的!
  20. 2023年全国最新会计专业技术资格精选真题及答案36

热门文章

  1. attachEvent中this指向(转)
  2. 做项目时自己的心得体会
  3. SQL查询效率:100万数据查询只需要1秒钟
  4. 为什么RegisterClientScriptResource方法在自定义控件中的RenderContents期间不起作用?...
  5. 主板故障的分析和诊断
  6. GIS案例练习-----------第五天
  7. 利用HTML制作简易新闻网站的静态网页
  8. ArcGIS 判断坐标系是否正确
  9. EXCEL同一个界面下打开两个表格比较
  10. Android透明状态栏或者渐变色状态栏