emoji 表情字符插入的配置

最近做的项目中,在插入 ?? 字符时报错了

ERROR 1366: 1366: Incorrect string value: ‘\xF0\x9D\x8C\x86‘ for column ‘vl‘ at row 1

在苦苦挣扎了数小时后将其解决掉了~~ 只要将 utf8 转到 utf8mb4 就好了

这个问题其实不是那么难,之所以花了比较长的时间来解决主要还是由于对于 MySQL 的配置不是很清楚,还好使用的数据库版本是 5.5.39,因为够幸运 在版本MySQL 5.5.3 (released in early 2010)时,刚好MySQL 支持了 utf8mb4 字符集。

具体 utf8 和 utf8mb4 的区别,可以参考https://mathiasbynens.be/notes/mysql-utf8mb4

下面把相应的解决方案贴出来,感谢大牛无处不在啊~~

要处理这样的状况肯定少不了更改 /etc/mysql/my.cnf 文件咯,具体文件的位置根据自己的配置查找吧。

我们查看下 MySQL Server 现有的字符集吧

这是我现在数据库的配置

接下来我们在 my.cnf 中添加以下配置

[client]
default-character-set=utf8mb4

[server]
character_set_server=utf8mb4

配置后的情况

可以看到配置中的 client、connection、database、result、server 都是 utf8mb4 了。到这里其实就完成了 90%,只要验证下就知道了。

很好,没有报错,接下来进行查询,可以看看是否能够正常显示

这一步也正确!

这样我们对于数据库的配置也算完成了,不过还要注意的一个问题就是当前操作的数据库、数据表、字段同样是需要支持 utf8mb4 的

# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

all done!

在做这个更改的过程中我其实同时使用了 mysql-workbench 和 mysql 进行访问的, 但是奇怪的是

SHOW VARIABLES LIKE ‘%character%‘

在 mysql 命令下显示的是本地数据库的配置,而在 mysql-workbench 中的却不是,相当郁闷啊~~

可以看到 client、connection 等没有被更改为 utf8mb4, 不知道是不是 mysql-workbench 是否还有其他的配置,遗憾的是还没有找到具体的配置方案,不过呢,作为临时的解决方案,可以通过以下的命令来处理

SET NAMES utf8mb4

这样感觉相当方便啊,一下子全给改掉了,不过不是持久的~~

~~噢噢,暂给出此种方案,知道原因的帅哥靓妹还望给个提示呢 ^_^

时间: 2024-10-08 22:41:14

emoji 表情字符插入的配置的相关文章

【异常处理】Incorrect string value: '\xF0\x90\x8D\x83...' for column... Emoji表情字符过滤的Java实现

Emoji表情字符现在在APP已经广泛支持了.但是Mysql的UTF8编码对Emoji字符的支持却不是那么好.所以我们经常会遇到这样的异常: Incorrect string value: '\xF0\x90\x8D\x83...' for column 原因是Mysql里UTF8编码最多只能支持3个字节,而Emoji表情字符使用的UTF8编码,很多都是4个字节,有些甚至是6个字节. 解决的方案有两种: 1.使用utf8mb4的mysql编码来容纳这些字符. 2.过滤掉这些特殊的表情字符. 关于

【转】移动前端手机输入法自带emoji表情字符处理

http://blog.csdn.net/binjly/article/details/47321043 今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入法里自带的emoji表情,应该是某些特殊字符.既然是字符,那应该都能提交才对,可是为啥会被卡住呢?搜了一下,才发现,原来emoji用到的字符是4字节的utf-16(utf-16有2字节和4字节两种编码),而我们的数据库是采用的utf-8,并且最大只允许3字节的字符.这样冲突就产生了,表单因为这些em

移动前端手机输入法自带emoji表情字符处理

今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入法里自带的emoji表情,应该是某些特殊字符.既然是字符,那应该都能提交才对,可是为啥会被卡住呢?搜了一下,才发现,原来emoji用到的字符是4字节的utf-16(utf-16有2字节和4字节两种编码),而我们的数据库是采用的utf-8,并且最大只允许3字节的字符.这样冲突就产生了,表单因为这些emoji字符的存在无法提交. 找到原因之后,接下来就要考虑解决方案了.目前考虑到的两种方案,一是让后台处理,

MYSQL 写入emoji表情字符处理

这个鬼emoji表情是4个字节,mysql使用的utf8编码,UTF8占3个字节,要存储那个emoji表情需要将mysql编码由UFT8改为UFT8的超集,utf8mb4; 改数据库编码容易引起大面的乱码灾难.所以当遇到emoji字符表情的时候做特殊处理.网上也有很多处理方案,最后找到了一个贴上地址和代码:https://github.com/BriquzStudio/php-emoji ,多谢 class Emoji { /** * Encode emoji in text * @param

Python string中删除(过滤)掉emoji表情字符

最近做了一个需求,把公众号的用户信息同步到服务端,发现很多用户的昵称里面都有表情符号(emoji), 一般的处理方式是把MySQL的编码改成 utf8mb4,后来讨论了下,这些表情也没什么用,入库的时候直接删除就好了. 过滤方法 Python怎么过滤 emoji表情符号呢? 下面是剔除表情字符串的代码片段 python2.7 下测试 import re emoji_pattern = re.compile( u"(\ud83d[\ude00-\ude4f])|" # emoticons

检测textView里面的文字是否包含emoji表情字符

用这个方法可以检测出来,返回bool值 - (BOOL)stringContainsEmoji:(NSString *)string { __block BOOL returnValue = NO; [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *subs

js解析emoji表情

Emoji 公司的产品之前只有网页端,并没有提供emoji表情,之后将某个模块整合到app中,里面有个评论功能,在手机端可以输入emoji,显示的时候是空白,说明数据库并没有存储成功,查阅资料后得知emoji是四个字节,而mysql5.5.3前的版本utf8编码最多只支持3个字节. js解析emoji 先需要了解几个概念,js的编码方式.utf16.unicode 1.JavaScript语言采用Unicode字符集,但是只支持一种编码方法ucs-2 2.utf16编码 utf16是ucs-2的

Flask项目中向Mysql存入Emoji表情引起的Bug

Bug背景 之前在写Flask入门项目Flask Mega项目的时候,一直都是用SQLite,后面切换到Mysql数据库发现在存入一些EMOJI表情符号的时候,会出现如下的报错. Bug解决思路 刚开始觉得应该是数据库的编码的问题,因为之前也遇到数据库存入特殊符号的时候发生报错.那先查看服务器上面的数据库编码格式. show variables like '%char%'; 通过查看数据库编码发现都是utf8格式.然后查阅有关的资料,以及翻阅之前做过的笔记发现,Mysql中的utf8编码格式最多

微信去除EMOJI表情

方法是: 方法是:return json_decode(preg_replace("#(\\\ue[0-9a-f]{3}|\\\ud83e|\\\udd14)#ie", "", json_encode($text))); 原理是: 进行微信公众号开发者接入的时候,与用户的对话互动中,涉及到的文本信息不仅仅是文字那么简单,其中可能还会包含着各种表情字符,例如「emoji表情」. 百科: Emoji 由于微信接口中对于emoji表情使用的是UTF-8的二进制字符串,并没