MySQL 中如何存储 emoji ?
问题还原
使用 erlang 存储一些特殊字符串到 MySQL 的时候,却没法读出来。经检查,这些字符串的二进制格式如下:
<<240,159,152,134,240,159,152,144>>
查看二进制的 unicode 是什么?
14> unicode:characters_to_list(<<240,159,152,134,240,159,152,144>>).
[128518,128528]
15> erlang:integer_to_list(128518,16).%%查看十六进制
"1F606"
16> erlang:integer_to_list(128528,16).
"1F610"
明显,1F606 和 1F610 超过了常见 unicode 字符串 0000-FFFF 的表达范围。
1F606 和 1F610 代表什么?
根据 unicode 官网上的说明,这是一种 emoji(表情符号),具体的展示形式与厂商有关。
MySQL 上存储失败的原因
目前来说,多数 MySQL 都是以 utf8 存储,注意 MySQL 的 utf8 和我们所说的传统 utf8 有点区别。MySQL 的 utf8 编码规定了最多只能有 3 个字节,而 emoji 的 unicode 已经超过了 3 个字节,因此 MySQL 的 utf8 无法识别与存储 emoji。
为此可以查阅 MySQL 中关于 unicode 支持的资料,从中可以得知 MySQL 在 5.5 后开始支持 utf8mb4,这种编码支持 1 ~ 4 个字节,这种编码可以表示 emoji。
另外 utf8mb4 向下兼容 utf8。
解决方案
将 MySQL 中对应的字段改成 utf8mb4 编码:
ALTER TABLE t1
DEFAULT CHARACTER SET utf8mb4,
MODIFY col1 CHAR(10)
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
MODIFY col2 CHAR(10)
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
将连接库的连接编码改为 utf8mb4,下面兄弟连(www.lampbrother.net)就以 erlang 的连接库 emysql 为例:
emysql:add_pool(pool,[{size,1},{user,"user"},{password,"password"},{host,"host"},{port,3306},{encoding,utf8mb4}]).
%%或者
emysql:add_pool(pool,1,"user","password","host",3306,undefined, utf8mb4).
为了建表方便,可以修改 my.cnf:
# 服务器字符集
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
分享到:
相关推荐
在早期的Mysql版本中,默认的编码是latin1,而这个编码无法正确地存储emoji表情符号。为了解决这个问题,需要将Mysql的编码升级到UTF8MB4,这样可以正确地存储和显示emoji表情符号。 升级编码的步骤 1. 在...
在Java开发环境中,当数据库使用MySQL且编码设置为UTF-8时,尝试存储包含emoji表情的数据可能会遇到如下错误: ``` java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x93' for column '...
这个实例展示了如何在MySQL数据库中存储、查询和使用emoji。以下是对这个实例的详细解析: 一、MySQL数据库与emoji支持 1. **Unicode支持**:MySQL 5.7.6引入了对Unicode 8.0的支持,这意味着它可以处理更多的字符...
本文实例讲述了MySQL无法存储emoji表情解决方案。分享给大家供大家参考,具体如下: 今天学习爬虫爬伯乐在线的文章,由于在文章中有emoji表情,导致有emoji表情的文章都爬取不下来 经过一番搜索之后终于解决了问题。...
本文实例讲述了MySQL无法存储Emoji表情问题的解决方法。分享给大家供大家参考,具体如下: 数据插入的时候报错: 1366 – Incorrect string value: ‘\xF0\x9F\x98\x81’ for column ‘job’ at row 23 解决办法: 1...
MySQL 需要支持 emoji 表情符号版本需要大于5.5.3,且字符集需要设置为utf8mb4 字符集。 utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节,而utf8mb4则扩展到一个字符最多能有4字节,所以...
用户昵称中存在emoji表情,调用jdbc往mysql数据库插入的时候抛出异常 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\x9B' 失败原因 mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4...
总之,要成功地在MySQL中存储和读取emoji表情符号,关键在于使用`utf8mb4`字符集,并确保整个数据链路的兼容性。通过遵循上述步骤,你可以有效地处理这些丰富多彩的表情符号,为用户提供更加生动的交互体验。
MySQL存储Emoji表情步骤详解知识点如下: 1.Emoji表情编码问题:Emoji表情虽然采用UTF-8编码,但是一个Emoji表情字符实际上需要使用4个字节来进行编码,而MySQL中的utf8编码仅能存储3个字节的字符。因此,直接存储...
对于数据库操作,选择支持Unicode的数据库系统(如MySQL、PostgreSQL等),并确保字段类型为可存储Unicode的类型,如utf8mb4。 4. **兼容性问题**:尽管Unicode广泛支持,但不同的操作系统、浏览器或设备可能对...
2. **MySQL存储emoji**: - 数据库字符集设置:确保MySQL数据库、表以及字段的字符集设定为`utf8mb4`,因为`utf8`只支持部分Unicode,而`utf8mb4`则支持所有Unicode字符,包括emoji。 - PHP连接设置:在连接MySQL...
MySQL存储Emoji表情报错的处理方法是通过将MySQL数据库的编码更改为utf8mb4来实现的。Emoji表情是使用Unicode编码的字符,通常占用4个字节。而MySQL中的utf8编码只支持最多3个字节的字符,因此当尝试存储4字节的...
在处理含有emoji表情的数据时,往往会遇到一些意料之外的问题,尤其是在将其存储到MySQL数据库中时。本文将详细探讨如何解决这一问题,并特别关注使用PHP通过PDO连接MySQL时需要注意的关键点。 #### 一、背景介绍 ...
- 数据库存储:由于emoji的Unicode特性,数据库需要支持Unicode存储,例如MySQL的utf8mb4字符集。 - 查询和搜索:在处理包含emoji的数据时,需要考虑如何正确进行查询和全文搜索,这可能需要特定的数据库配置或第...
在本文中,我们将深入探讨如何在 Laravel 开发中利用 `laravel-emoji` 包来有效地集成和使用表情符号(emojis)。`laravel-emoji` 是专为 Laravel 5 设计的一个扩展,旨在帮助开发者在他们的应用中无缝地集成和处理 ...