一、Unicode 字符集包含了上百万个字符

二、编码方式

(1)UTF-32编码:最简单的编码,每个字符使用 32 位。

缺点:这样做最简单,因为一直以来,计算机将 32 位视为数字,而计算机最在行的就是处理数字。但问题是,这样太浪费空间了。

希望:UTF-8 可以节省空间,在 UTF-8 中,

①字符“C”只需要 8 位。

②一些不常用的字符,比如“”需要 32 位。

③其他的字符可能使用 16 位或 24 位。

(2)utf8编码:只能算是个专有的字符编码,只支持每个字符最多3个字节(24位)。

(3)utf8mb64编码:真正的实现UTF-8编码。 每个字符最多4个字节(32位)。能满足上述3条

三、从MySQL的utf8编码切换到utf8mb4编码

第1步:创建备份

创建要升级的服务器上所有数据库的备份。 安全第一!

第2步:升级MySQL服务器

将MySQL服务器升级到v5.5.3 +,或要求服务器管理员为您执行此操作。

第3步:修改数据库,表和列

更改数据库,表和列的字符集和排序规则属性以使用utf8mb4而不是utf8。

# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)

由于utf8mb4完全向后兼容utf8,因此不应出现mojibake或其他形式的数据丢失。 (但你有备份,对吧?)

第4步:检查列和索引键的最大长度

这可能是整个升级过程中最乏味的部分。

从utf8转换为utf8mb4时,列或索引键的最大长度以字节为单位不变。因此,它在字符方面较小,因为字符的最大长度现在是四个字节而不是三个字节。

例如,TINYTEXT列最多可容纳255个字节,这与85个三字节或63个四字节字符相关。假设您有一个使用utf8的TINYTEXT列,但必须能够包含超过63个字符。鉴于此要求,您不能将此列转换为utf8mb4,除非您还将数据类型更改为更长的类型(如TEXT) - 因为如果您尝试使用四字节字符填充它,则只能将输入63个字符,但不能更多。

索引键也是如此。 InnoDB存储引擎的最大索引长度为767字节,因此对于utf8或utf8mb4列,最多可以索引255或191个字符。如果您当前的索引长度超过191个字符的utf8列,则在使用utf8mb4时需要索引较少数量的字符。 (因此,我不得不将一些索引的VARCHAR(255)列更改为VARCHAR(191)。)

“MySQL 5.5参考手册”的10.1.11节提供了更多相关信息。

步骤5:修改连接,客户端和服务器字符集

在应用程序代码中,将连接字符集设置为utf8mb4。这可以通过简单地用SET NAMES utf8mb4替换SET NAMES utf8的任何变体来完成。如果您的旧SET NAMES语句指定了排序规则,请确保也更改它,例如SET NAMES utf8 COLLATE utf8_unicode_ci变为SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci。

确保也设置客户端和服务器字符集。 我的MySQL配置文件(/etc/my.cnf)中有以下内容:

[client]
default-character-set = utf8mb4[mysql]
default-character-set = utf8mb4[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

您可以轻松确认这些设置是否正常工作:

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)

如您所见,所有相关选项都设置为utf8mb4,除了character_set_filesystem,它应该是二进制的,除非您在文件系统中支持文件名中的多字节UTF-8编码字符,而character_set_system总是utf8和 不能被覆盖。

注意:默认字符集和排序规则也可以在其他一些级别配置。

第6步:修复和优化所有表

升级MySQL服务器并进行上述必要的更改后,请确保修复和优化所有数据库和表。 升级后我没有立即执行此操作(我认为没有必要,因为乍一看似乎一切正常),并遇到一些奇怪的错误,其中UPDATE语句没有任何效果,即使没有 错误被抛出。

您可以为要修复和优化的每个表运行以下MySQL查询:

# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;

幸运的是,这可以使用命令行mysqlcheck实用程序一次完成:

$ mysqlcheck -u root -p --auto-repair --optimize --all-databases

这将提示输入root用户的密码,之后将修复和优化所有数据库中的所有表。

转载:

utf8编码转成utf8mb4的步骤

记住,永远不要在MySQL中使用“utf8”

Mysql 的utf8编码 PK utf8mb4编码相关推荐

  1. utf8编码和utf8mb4编码(其它编码简介)

    文章目录 一.存储编码简介 二.范围 三.为何要增加utf8mb4编码 一.存储编码简介 GBK编码专门用来解决中文编码的,是双字节的.不论中英文都是双字节的. UTF-8编码中,一个英文字符占用一个 ...

  2. mysql utf8mb4 配置_MariaDB(Mysql)配置utf8mb4编码

    在配置完MariaDB(MySQL) Linux服务器环境后,发现windows MySQL上使用的是utf8mb4编码,而服务器端MariaDB(MySQL)还是默认使用utf8进行编码,导出的sq ...

  3. MySQL的utf8与utf8mb4编码,以及utf8_bin、utf8_general_ci编码区别

    utf8和utf8mb4的区别 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.utf8mb4是utf ...

  4. MySQL create database 新建utf-8/utf8mb4编码 数据库

    创建utf8编码 数据库 CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci; ...

  5. 设置MySQL/MariaDB 数据库默认编码为utf8mb4 (推荐)

    MySQL/MariaDB中的UTF-8并不是真正的UTF-8,其中的UTF8MB4才是真正的UTF-8.因此推荐使用UTF8MB4. 先查看自己数据库的默认字符集: MariaDB [(none)] ...

  6. 修改mysql用utf8mb4_更改MySQL数据库的编码为utf8mb4

    原文:http://blog.csdn.net/woslx/article/details/49685111 utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3 ...

  7. mysql 更改数据库编码_更改MySQL数据库的编码为utf8mb4

    utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符.如果直接往采用utf-8编码的数据库中插入表情数据,Java程 ...

  8. mysql 安装 utf8mb4_mysql 安装和修改编码(utf8mb4)

    安装mysql(linux 我的环境centos 7) 安装MySQL官方的Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-com ...

  9. mysql改utf8mb4后速度慢_更改MySQL数据库的编码为utf8mb4

    更改MySQL数据库的编码为utf8mb4 utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符. 采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑微信昵称 ...

最新文章

  1. PL/SQL学习笔记-常量变量及数据类型初步
  2. 字节老板在群里diss员工:上班时间聊游戏,工作很闲吗?员工回怼:查聊天记录,看聊天时间占工作时间百分比!网友:真·扁平化管理!...
  3. [转载]明天的数字营销分析工具2
  4. [云炬创业学笔记]第一章创业是什么测试15
  5. 2021-03-09 PPT字号设置规则和图片网站(from 旁门左道)
  6. 《Puppet实战手册》——导读
  7. 解决VS2017中使用scanf函数报错的问题
  8. SDP 软件定义边界
  9. 哪些因素影响大数据的发展
  10. CF1151div2(Round 553)
  11. 微PE工具箱(CGI)安装Win10系统教程
  12. 计算机磁盘100,18个方法解决电脑磁盘占用100%
  13. python3自动发送邮件并添加附件
  14. matlab plotyy 属性如何调整,科学网—【Matlab】如何用plotyy对应坐标绘制多条曲线 - 叶瑞杰的博文...
  15. Visio 2013最新产品密钥分享,在安装时可以使用以下密钥:
  16. Maven系列学习(1)——安装以及本地仓库和仓库镜像的配置
  17. 大数据研究,不能“忽悠”
  18. HTML-作业(基础)
  19. 网络层IP协议和数据链路层
  20. 谈谈Eureka的自我保护模式

热门文章

  1. 知识小科普,电苍蝇拍的工作原理,如何将3V电压升到上千伏
  2. 自定义Flutter Lint插件实现自己的Dart语法规则(静态语法分析检测)
  3. redis安装 linux make,linux下安装redis执行make的时候报错
  4. bacula 备份mysql_企业级的开源备份工具Bacula之安装
  5. H3C ARP攻击防御解决方案
  6. Android之两级联动点餐列表
  7. 颜值经济时代,健身App应具备功能
  8. 同步手机真机屏幕到PC上的软件使用方法
  9. CSS权重,属性书写顺序,布局技巧和网页布局总结,盒子模型排列位置---CSS
  10. POJO,VO,entity,DTO,DAO的区别