不要温和的走进那个良夜
Do not go gentle into that good night

Mysql中utf8真的推荐么

博客有好长一段时间没有升级了,然后发现新版数据库默认使用utf8mb4,那么这个utf8mb4跟默认的utf8有什么区别呢?简单狗一下,发现一大堆完全一样的文章,但是很多地方都极大的误导人,为了解决这个问题于是便有了我们这篇短文。

以下是本人狗出来最多的文章开头,几乎都是一模一样的:

1、MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。

2、好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

我不知道这段话最早是谁写出来的,本意没问题,好像5.5.3以后更新了版本,更加兼容更加完美,而我们为了节省空间一般utf8就够了。但是问题就在于,恐怕这篇文章最早是外国友人写的吧。于是就有了后面这一段话:

包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等都无法使用。

是不是觉得跟上面的utf8就够了的感觉比起来完全不够,且不说为了以后的兼容性mysql提出了utf8mb4,而且是向下兼容的,phpmyadmin默认就使用utf8mb4了,其次上文说的很多不长见的汉字这里常见不常见又是如何定义的呢?而且现在主流是在移动端,不支持Emoji也就算了,Incorrect string value: ‘\xF0\xA1\x8B\xBE\xE5\xA2…’ for column ‘name’,这样的错误是绝对不能允许的,所以强烈建议全部都使用utf8mb4。

最后找找Mysql的历史原因(下面这段话是出自于英文原版in mysql never use utf8 use utf8mb4 翻译)

为什么MySQL的开发者开发了一个奇怪的“utf8”。我们可以通过提交的日志来揣测一下。

MySQL从4.1版开始支持UTF-8。那是在比今天UTF-8 RFC 3629标准更早的2003年。

在此之前的UTF-8标准,RFC 2279中规定6个bytes表示一个字符。MySQL的开发者在2002.3.28编码实现了RFC 2279 。并发布了pre-pre-release 的 MySQL 4.1

赞(0)
未经允许不得转载:林枫紫涵 » Mysql中utf8真的推荐么

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #3

    不粗的,教程学习了

    技能制造大师3个月前 (02-25)回复
  2. #2

    换了主题么

    jeff5个月前 (12-20)回复
  3. #1

    文章不错非常喜欢

    今日新闻5个月前 (12-13)回复