utf8与utf8mb4的区别
最近在写一个爬虫的多线程脚本,在异步插入数据库的时候总有部分数据插入失败,原因竟然是编码的问题。扪心自问,mysql最通用的中文字符编码就是utf-8了,通常情况下,utf-8作为中文编码是司空见惯的,但是还是一如既往的写入数据库失败。
原来MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。其实,utf8mb4是utf8的超集,理论上原来使用utf8,然后将字符集修改为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。当然,为了节省空间,一般情况下使用utf8也就够了。低版本的MySQL支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。
UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。这些不在BMP中的字符包括哪些呢?最常见的就是Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和一些不常用的汉字,以及任何新增的 Unicode 字符等等。理论上讲, UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8,事实上,最新版的phpmyadmin默认字符集就是utf8mb4。诚然,对于 CHAR 类型数据,使用utf8mb4 存储会多消耗一些空间。
最新文章
- Leetcode 第一遍刷完
- C#如何在事件中获得GridView里面TextBox的值
- import static与import的区别
- CSS 实现背景半透明
- app 测试点
- 反射操作辅助类ReflectionUtil
- 异常处理 - PHP手册笔记
- tabbar动画切换
- android开发艺术探索读书笔记之-------view的事件分发机制
- JavaScript基礎知識
- C# 我的小画板
- Java并发编程(十一)线程池的使用
- 格林第一季/全集Grimm迅雷下载
- Linux如何实现开机启动程序详解(转)
- 关于ddx/ddy重建法线在edge边沿上的artifacts问题
- PHP 连接oracle
- Python_oldboy_自动化运维之路_全栈考试(五)
- 【8.13校内测试】【DP】【按除数分类】【二分】
- 《Clean Code》一书回顾
- nodejs报错 XMLHttpRequest cannot load localhost:3000/test_date/. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.