mysql utf8 4位_mysql中utf8和utf8mb4区别
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 4位_mysql中utf8和utf8mb4区别相关推荐
- mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天
mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...
- mysql gbk编码 字节数_MySql中UTF8和GBK编码中文字符长度问题
2.设计函数,输入为一个字符串,里边包含中文.英文.数字等字符,编码为GBK.中文字符的编码规则假定为:双字节组成,高字节大于0x80,低字节任意. a) 用常用语言(c/c++/php/ja ...
- mysql 创建 utf8 的数据库_mysql创建utf8数据库
CentOS6.5下通过Shell创建.备份.还原MySQL数据库 CentOS6.5下通过Shell创建.备份.还原MySQL数据库 创建数据库: mysql -uroot -p123456 -e ...
- php utf8(无bom),php中utf8 与utf-8 与utf8 无BOM
utf8 与utf-8 相信很多程序员刚开始也会有这样的疑惑,如题,我也是. 其实,他们可以这样来区分. 一.在php和html中设置编码,请尽量统一写成"UTF-8",这才是标准 ...
- mysql乱码的问题_MySQL中出现乱码问题的终极解决宝典
MySQL出现乱码的原因 要了解为什么会出现乱码,我们就先要理解:从客户端发起请求,到MySQL存储数据,再到下次从表取回客户端的过程中,哪些环节会有编码/解码的行为.为了更好的解释这个过程,博主制作 ...
- mysql日期格式化季度_mysql中常用日期比较与计算函数
MySql中时间比较的实现 unix_timestamp() unix_timestamp 函数可以接受一个参数,也可以不使用参数. 它的返回值是一个无符号的整数.不使用参数,它返回自1970年1月1 ...
- mysql怎么查看代码_MySQL中的编码查看与设置(转载)
1.查看数据库编 2.查看数据表的编码格式 3.创建数据库时指定数据库的字符集 mysql>create database character set utf8; 4.创建数据表时指定数据表的编 ...
- mysql sql 时间比较_mysql中sql语句进行日期比较
这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAY ...
- java中utf-8怎么设置_eclipse中UTF-8设置
eclipse中UTF-8设置 1.windows->Preferences 打开"首选项"对话框: 2.然后,general->Workspace,右侧Text fi ...
最新文章
- Learn OpenGL (十二):投光物
- 清华官宣:前百度总裁张亚勤正式加盟清华大学
- 可解释性 or 准确性?AI 模型就一定不能两者兼得吗?
- 可以从max中导出静态模型并渲染了。
- UIPopoverController的使用
- PhpYun人才系统 整合 Ucenter 之后,会员注册提示”该 Email 已经被注册!“的解决方案
- 2020年国内电影总票房突破100亿元
- python相关性系数显著性检验_Python气象数据处理与绘图(4):显著性检验
- 2FSK在瑞利衰落信道下的相干与非相干解调误码率-MATLAB基带仿真
- 前馈电容的作用-DCDC
- 因数分解——Pollard' p-1 Pollard rho
- 天蝎座最适合的职业-天蝎座不同型血适合工作分析
- 联想机架式服务器安装文档,联想智能超算平台LiCO安装手册.docx
- 毕业设计--智能环境监测系统基于harmonyOS的移动端应用开发
- 如何查看公众帐号粉丝的微信号
- saber框架 blade-core-tool:2.5.1 maven无法正常下载
- 伤疤好了有黑印怎么办_脸上疤掉了黑印怎么办 五种方法去除黑印
- 华为b6手环能升级鸿蒙吗,华为手环B6,终于等到你!两年磨一剑的升级,亮点多多!...
- 全国青少年编程等级考试scratch四级真题2022年12月(含题库答题软件账号)
- Django前后端分离1——jwt