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。

本站原创内容,如需转载请注明来源:https://www.liutonghui.com/184.html

上一篇 2020-06-14
下一篇 2020-08-22

评论列表(0条)

  • 暂时没有评论!

发表评论

captcha

相关推荐

  • 华为Mate60手机开售,麒麟5G芯片回归,遥遥领先!

      没开发布会,没有预告就直接开卖备受关注的旗舰手机,华为Mate60系列算是开了个头。这几天华为登上了热搜,这次是因为华为Mate60手机携带“麒麟芯片”提前开售,瞬间售罄,同时也标志着麒麟5G芯片的正式回归。这一消息在各大主流媒体平台上迅速引发热议,网友们纷纷发表意见,自媒体人也争相蹭热度,提出各自观点。   如果你打开华为商城app,可以看到华为已经在自家商城上架了华为Mate60系列手机,而这些手机已经......

    2023-08-31
    7570
  • CSS创建竖排文字的简单方法

      在制作网页的时候我们经常需要创建一些竖排的文字,或许这对你来说是一件很简单的事情,但是你是否想过用CSS可有N种创建竖排文字的方法?下面是由我翻译自Nettuts+的文章,希望这几种方法能够给你带来一些提示。   方法一:<br />标签   一种可能的方法(但不推荐)是在每个字母后面添加<br />标签来实现竖排文字: <h1> N <br />E <br />T ......

    2013-11-27
    13880
  • 王杰出道35周年出新歌,60岁浪子仍洒脱

      12月17日,消失在歌迷视线中多年的老牌创作型歌手王杰突然发布了一首新歌《一场游戏一场梦(结束篇)》,今年是2022年,正好是王杰出道35年整。1987年12月19日,王杰在台湾发行首张专辑《一场游戏一场梦》正式出道,这张专辑一经发行就轰动了整个华语乐坛,在中国台湾、中国香港、中国大陆、东南亚等地都创下了惊人的销量,专辑中的同名主打歌《一场游戏一场梦》、《安妮》等歌曲直到今天依然是KTV点唱率非常高的歌曲。 点击上方播放视......

    2022-12-24
    8510
  • 刘强东与章泽天的恋情是否有年龄差异背后的真爱

      国内互联网电商巨头京东创始人刘强东,与知名的"奶茶妹妹"章泽天之间的恋情引发了广泛的关注和讨论。他们的恋情让人们重新思考了爱情是否真的受到年龄的束缚,以及爱情何时才算是合适的。   刘强东是一位非常成功的企业家,他是京东集团的创始人,也是该公司的首席执行官。他创办的京东已经成为全球电商领域的巨头,成为了众多消费者首选的购物平台之一。刘强东的创业经历和个人魅力使得他在中国商业领域备受瞩目。   章泽天(奶茶妹妹)是一位年轻貌美......

    2014-07-27
    22170
  • 窃格瓦拉逆袭:周立齐的经历引发社会对价值观的思考

      周立齐,这个曾经因偷窃电动车电瓶而闻名一时的人,如今已成为互联网上的网红。他曾因为偷窃行为被网民称为“窃格瓦拉”。但是,这个曾经的罪犯在出狱后走上了创业的道路,甚至成为了一名企业家。   周立齐曾经因为多次盗窃电动车电瓶而被判刑。在狱中,他因为一句“打工是不可能打工的,这辈子不可能打工。”而走红,这句话甚至被做成了表情包,在网络上广为流传。出狱后,他并没有停下脚步,而是利用这波流量积......

    2023-03-27
    6540
  • 王冰冰不能结婚离婚吗?谁规定的?

      王冰冰是央视近年来力推的知名记者,她以初恋般的清纯可爱的外貌形象走红,被称为“央视收视密码”。走红后的王冰冰也被受邀参加了很多节目和活动,她本人的自媒体账号也收获了500万的粉丝。   不过,人红事非多,近日,就有人爆出了王冰冰大量的个人隐私内容,她早年英语四级成绩只有369分。考了两次才合格。爆料中还提到王冰冰其实早就结过婚了,并且现在属于离婚状态。还说王冰冰19岁就和男友同居,后来被甩了,嫁给了吉林......

    2022-01-24
    12882
  • 高效jQuery的奥秘

      讨论jQuery和javascript性能的文章并不罕见。然而,本文我计划总结一些速度方面的技巧和我本人的一些建议,来提升你的jQuery和javascript代码。好的代码会带来速度的提升。快速渲染和响应意味着更好的用户体验。   首先,在脑子里牢牢记住jQuery就是javascript。这意味着我们应该采取相同的编码惯例,风格指南和最佳实践。   首先,如果你是一个javascript新手,我建议您阅读 《JavaScri......

    2015-12-09
    15080
  • PHP封装数据库操作Model类示例

      数据库操作是产品开发中最常见的需求,封装一个PHP数据库操作Model类可以减少反复的写大量SQL语句,下面就为大家分享一个数据库操作Model类。 <?php //引入配置文件 include "./config.php"; class Model { public $link;//存储连接对象 public $tableName = "";//存储表名 public $field =......

    2019-06-12
    15674