全面了解mysql中utf8和utf8mb4的区别_MySQL

一、简介

MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

二、内容描述

那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。

三、问题根源

最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。

Mysql 中的 utf8 为什么只支持持最长三个字节的 UTF-8字符呢?我想了一下,可能是因为 Mysql 刚开始开发那会,Unicode 还没有辅助平面这一说呢。那时候,Unicode 委员会还做着 “65535 个字符足够全世界用了”的美梦。Mysql 中的字符串长度算的是字符数而非字节数,对于 CHAR 数据类型来说,需要为字符串保留足够的长。当使用 utf8 字符集时,需要保留的长度就是 utf8 最长字符长度乘以字符串长度,所以这里理所当然的限制了 utf8 最大长度为 3,比如 CHAR(100) Mysql 会保留 300字节长度。至于后续的版本为什么不对 4 字节长度的 UTF-8 字符提供支持,我想一个是为了向后兼容性的考虑,还有就是基本多文种平面之外的字符确实很少用到。

要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持(查看版本: select version();)。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8. 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。

以上这篇全面了解mysql中utf8和utf8mb4的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1659539.html

(0)
上一篇 2025年2月19日 06:49:18
下一篇 2025年2月19日 06:54:27

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 成品wordpress进入网站 wordpress成品网站永久免费版进入

    本文介绍了获取WordPress成品网站永久免费版的多种途径,包括:WordPress官方网站,提供软件下载、主题模板、插件扩展及教程;WordPress.com,提供免费托管服务,但功能有限;免费主题资源网站,如TemplateMonst…

    2025年3月29日
    100
  • wordpress成品网站入口免费登录2025

    本文介绍了多种免费搭建WordPress网站的方法,主要包括两种途径:一是利用WordPress.org下载程序,结合官方主题库和插件自行搭建;二是借助WordPress.com的免费托管服务快速建站。此外,文章还推荐了TemplateMo…

    2025年3月29日
    100
  • Linux服务器上LNMP性能监控方法

    本文介绍几种在Linux服务器上监控LNMP(Linux, Nginx, MySQL, PHP)性能的方法和工具,助您确保服务器稳定运行。 一、Nginx监控 内置模块ngx_http_stub_status_module: 启用该模块后,…

    2025年3月29日
    100
  • Linux strings命令在不同文件格式中的表现

    linux strings 命令详解:从二进制文件中提取可打印字符串 strings 命令是 Linux 系统中一个强大的工具,用于从各种类型的文件中提取可打印的字符串。它能够帮助我们分析二进制文件,提取有用的信息。 下文将探讨 strin…

    2025年3月28日
    100
  • LNMP环境下如何进行故障排查

    LNMP (Linux, Nginx, MySQL, PHP) 环境故障排查指南: 第一步:确定问题 仔细记录故障现象,包括时间、受影响服务、用户反馈等细节信息,为后续排查提供依据。 第二步:检查系统资源 使用系统监控工具,检查CPU、内存…

    2025年3月28日
    100
  • Linux LAMP中MySQL如何备份数据

    在Linux LAMP架构中,定期备份MySQL数据库至关重要,这能有效保障数据安全和可恢复性。本文介绍几种常用的MySQL数据库备份方法: 方法一:利用mysqldump工具 mysqldump是MySQL自带的强大备份工具,支持对整个数…

    2025年3月28日
    100
  • Linux系统中LNMP日志管理技巧

    Linux系统中,LNMP(Linux、Nginx、MySQL、PHP)架构的日志管理至关重要,它直接关系到系统的稳定性和安全性。本文提供一些实用技巧,帮助你优化LNMP环境下的日志管理。 高效日志管理策略 日志轮转 (Log Rotati…

    2025年3月28日
    100
  • 如何通过日志预防Linux系统攻击

    日志分析是Linux系统安全防护的关键策略。本文将阐述如何通过日志记录、分析和响应来有效抵御潜在攻击。 一、启用并优化日志记录 全面启用日志功能: 确保所有核心服务和应用(SSH、Apache/Nginx、MySQL/PostgreSQL等…

    2025年3月28日
    100
  • 如何在LNMP中实现自动备份

    本文介绍如何在LNMP环境下轻松实现网站及数据库的自动备份。 我们将探讨几种方法,助您保障数据安全。 方法一:利用LNMP自带备份脚本 许多LNMP一键安装包都包含备份脚本(例如backup.sh,通常位于/root/lnmp1.6/too…

    2025年3月28日
    100
  • Linux日志中CPU使用率高的原因

    Linux系统日志通常不会直接指出CPU占用率过高的原因,但它们是诊断问题的关键线索。本文列举了导致CPU负载过高的常见因素,并讲解如何利用日志文件及其他工具进行排查和解决。 进程负载过高: 使用top或htop命令实时监控CPU资源占用情…

    2025年3月28日
    100

发表回复

登录后才能评论