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 平面。
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。
更改数据库编码:ALTER DATABASE caitu99 CHARACTER SET
utf8mb4
COLLATE
utf8mb4_general_ci
;
更改表编码:ALTER TABLE
TABLE_NAME
CONVERT TO CHARACTER SET
utf8mb4
COLLATE
utf8mb4_general_ci
;
如有必要,还可以更改列的编码
一、简介MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。二、内容描述那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql
本文实例分析了
mysql
存储
emoji
表情
报错的处理
方法
。分享给大家供大家参考,具体如下:
utf-8编码可能2个
字节
、3个
字节
、4个
字节
的
字符
,但是
MySQL
的
utf8
编码只
支持
3
字节
的数据,而移动端的
表情
数据是4个
字节
的
字符
。如果直接往采用utf-8编码的数据库
中
插入
表情
数据,Java程序
中
将报SQL异常:
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1
at com.
mysql
.jdbc.SQLError.createSQLException(SQL
之前开发时需要在数据库
保存
emoji
表情
符号,在数据库将表的
字符
集设置为
utf8
mb4,仍然无法
保存
表情
,提示下面的报错 :java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94'。
最后发现是数据库连接的问题,本想在数据库链接参数
中
添加characterEncoding=
utf8
mb4,但是并不生效。最后是在每次执行
保存
emoji
表情
的语句之前,执行SET NAMES
utf8
mb4。后面又发现可以在建立数据库链接的初始化
由于需要实现
emoji
表情
评论的功能,所以数据库需要
支持
emoji
表情
的存储,根据查询的资料最终实现了该功能,现将实现的过程以及过程遇到的一些问题记录下来,供大家参考和交流。
mysql
的
utf8
编码的一个
字符
最多3个
字节
,但是一个
emoji
表情
为4个
字节
,所以
utf8
不
支持
存储
emoji
表情
。但是
utf8
的超集
utf8
mb4一个
字符
最多能有4
字节
,所以能
支持
emoji
表情
的存储。下面介绍了关于
项目开发
中
经常会遇到用户在评论或者发表文章的时候会打一些
表情
在里面,如果我们在开发
中
不去做一些处理的话,
表情
会出不来的,甚至是报错,下面简单介绍处理方式.
原文地址:
小时刻个人博客:http://small.aiweimeng.top/index.php/archives/
Emoji
.html
项目
中
评论或者文章
中
写入
表情
符号时,php报错,或者出来时一些???。这是为什么呢?
下面说一下...
MySQL
在5.5.3之后增加了这个
utf8
mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四
字节
的unicode。好在
utf8
mb4是
utf8
的超集,除了将编码改为
utf8
mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用
utf8
也就够了。
二、内容描述
那上面说了既然
utf8
能够存下大部分
中
文汉字,那为什么还要使用
utf8
mb4呢? 原来
mysql
作者:laruence(http://www.laruence.com/)· 本文地址: http://www.laruence.com/2008/01/05/12.html· 转载请注明出处
根据Chaos Wang的PPT整理而成, 在此再次感谢Chaos Wang的此次TechTalk
•
字符
(Character)是指人类语言
中
最小的表义符号。例如’A'、’B'等;
...
mysql
中
针对
字符
串类型,在设置charset的时候可以精确到字段。
如果只将某个字段设置
utf8
mb4,那么其他字段不会受影响。
如果针对表来设置,那么已经存在的字段依然是
utf8
,并且会多出
utf8
的标记,之后所创建的字段才会是
utf8
mb4。
如果针对库来设置,那么已经存在的表依然是
utf8
,之后所创建的表才会是
utf8
mb4。
除此之外呢,我们在连接数据库的时候,也要指明charset=
utf8
mb4,否则的话,此连接无法向
utf8
mb4的字段写入数据,并且读取的时候是
在存储Scratch项目的xml内容时,DB报了个错:Incorrect string value: '\xF0\x9F\x91\x8B",...' for colum ...........(省略)
因为数据库默认配置都是uft8,具体如下:
SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_...
设计数据库时,对于
字符
类型数据设计时,因为使用的是Navicat软件进行建表,经常默认的
字符
集是
utf8
md4,于是就去查了查
utf8
与
utf8
mb4的区别。
对于这两种编码,区别在于:
MySQL
在5.5.3版本以后增加了
utf8
mb4编码,其
中
mb4是most bytes 4的含义,用来兼容四个
字节
的Unico...
转自: (译)用
MySQL
的朋友们请不要使用"
utf8
",请使用"
utf8
mb4"
用
MySQL
的朋友们请不要使用"
utf8
",请使用"
utf8
mb4"
今天我试图把UTF-8编码的
字符
串插入使用“
utf8
”编码的MariaDB数据库
中
,Rails抛出一个古怪的异常:
Incorrect string value: ‘\xF0\x9F\x98\x83 <…’ for column...
什么是
UTF8
MB4?
我们在使用PhpMyAdmin管理面板时,可以在首页看到名为“Server connection collation”(服务器连接排序规则)的选项,用来选择所使用的
字符
集。对于我们常用的
UTF8
,却有
utf8
和
utf8
mb4两种,这是为什么呢?
原来,
MySQL
在5.5.3版本之后增加了这个
utf8
mb4的编码,mb4就是most bytes 4的意思,专门用来...
一、基本原则
如果要实现存储
emoji
表情
到
MySQL
实例,需要应用客户端、到
MySQL
实例的连接、
MySQL
实例内部 3 个方面统一使用或者
支持
utf8
mb4
字符
集。
否则会报Incorrect string value: ‘\xF0\x9F\x98\xAD",…’ for column ‘commentContent’ at row 1错误
解决
方法
1. 修改
mysql
数...