上云无忧 > 文档中心 > 百度智能云云数据库RDS utf8mb4字符集在云上的使用
云数据库 RDS
百度智能云云数据库RDS utf8mb4字符集在云上的使用

文档简介:
MySQL 在 5.7 版本中新增了生成列(Generated Column)的功能,它可以通过函数表达式计算获得新的一列数据,我们可以在函数表达式查询中通过构建生成列加索引的方式提高查询效率、分区表可使用生成列进行分区等,由于生成列默认是虚拟类型,因此通常称之为虚拟列。 for MySQL 版
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

背景

百度云创建实例时默认字符集为utf8,事实上MySQL的“utf8”字符集并不是真正的UTF-8字符集,它只支持每个字符最多三个字节,但是真正的UTF-8字符集最多可以支持四个字节;

MySQL的“utf8”字符集是一种“专属的编码”,它能够编码的Unicode字符并不多,使用该字符集存储数据有较大的局限性。

从MySQL5.5开始发布了utf8mb4字符集来支持真正的UTF-8字符集,并且utf8mb4是兼容MySQL的utf8字符集的。

问题现象

用户插入emoji表情符号是出现报错的情况,报错如下:

Incorrect string value: ‘\xF0\x9F\x98\x83 <…’ for column ‘xxxxx’ at row 1

原因分析

出现incorrect string报错是因为有些特殊字符需要使用utf8的超集utf8mb4字符集来存储,因此需要保证MySQL客户端、数据库连接、需要存储的emoji表情符号对象(库、表、字段)三者统一支持utf8mb4字符集。

解决方案

  1. 首先,库、表、字段级别要支持utf8mb4字符集:

(1)修改库级别字符集:

alter database db_name default character set utf8mb4 ;

(2)修改表级别字符集:

alter table tb_01 default character set utf8mb4 ;

表级别修改字符集前后checksum表数值一致:

 

(3)修改字段级别字符集:

alter table tb_01 change column1 column1 varchar(50) character set utf8mb4;

字段级别修改字符集前后checksum表数值一致:  

  1. 如果客户想要准确的写入并读取utf8mb4字符集字符,还需要:

(1)客户创建连接时指定utf8mb4字符集:

set names utf8mb4;

(2) 修改MySQL数据库存储的字符集:

修改 character-set-server = utf8mb4,default-character-set = utf8mb4后。这两个参数需要对MySQL实例重启生效。

结论建议

  1. RDS创建初期定义好合适的数据库字符集、表字符集和字段字符集是非常值得提倡的习惯。
  2. 如果业务某个表使用到每个字符大于3个字节的数据(例如emoji表情符号),建议该表直接选用utf8mb4字符集。
相似文档
  • mysqldump是MySQL自带的客户端工具,它主要用于对MySQL进行逻辑备份,可实现库、表、行级别的数据备份及库表结构备份需求。应用场景包括不限于如下几种情况: 执行DML、DDL类型SQL前进行数据备份(用于回滚需要)。 不同云厂商之间数据库的数据迁移。 数据库版本升级过程中的数据迁移。 导出部分数据到测试环境用于功能和性能测试。 for MySQL 版
  • time_zone参数是MySQL记录时区信息的变量,经常有客户发起对time_zone的修改需求,原因包括但不限于如下几点: 新迁移上云的RDS实例,修改time_zone对齐原数据库实例的时区信息。 由于JDBC时区函数的问题,导致应用程序查看到的时间和实际时间存在若干小时的偏差。 for MySQL 版
  • MySQL的InnoDB存储引擎的表存在一系列的限制条件,其中比较常见的一种是表的字段索引长度限制,该限制与参数innodb_large_prefix相关。 问题现象: 执行如下两个建表SQL操作,都返回了报错信息,导致建表失败。 for MySQL 版
  • 在数据库的使用过程中,经常需要进行批量的数据导入操作,MySQL数据库批量数据导入可以使用LOAD DATA命令,实现大批量数据的快速入库需求。 问题现象: 在使用LOAD DATA命令可能会遇到如下报错情况: 使用 LOAD DATA LOCAL INFILE 命令批量导入数据时,报错: ERROR 1148 (42000): The used command is not allowed with this MySQL version. for MySQL 版
  • 百度云支持更改数据库表的大小写设置参数,该参数修改后需要重启实例生效: lower_case_table_names=0,表示区分大小写,创建的库表会原样大小写保存在磁盘上。 lower_case_table_names=1,表示不区分大小写,创建库表时MySQL会将所有的库表名转换成小写字母保存在磁盘上,且SQL语句中涉及到库表无论写成大写或者小写,都会被转化成小写进行查询和写入。 for MySQL 版
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部