mysql 插入emoji表情的时候报错问题。

一、问题现象

保存微信用户昵称到数据库,ios用户的昵称包含表情,插入数据库出错。

二、分析

使用JS过滤emoji表情的主要原因:input标签中输入emoji表情,提交表单后插入数据库报错。
原因是因为UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而MySQL的utf8编码最多3个字节,所以数据插不进去。

三、解决方案

1.将Mysql的编码从utf8转换成utf8mb4

Linux修改mysql编码,参考另一篇文章:http://ycgit.blog.51cto.com/8590215/1783775

2.前端JS校验过滤掉emoji表情

下面主要粘下过滤emoji的JS代码

function filteremoji(){
    var ranges = [        
        ‘\ud83c[\udf00-\udfff]‘, 
        ‘\ud83d[\udc00-\ude4f]‘, 
        ‘\ud83d[\ude80-\udeff]‘
    ];    
    var emojireg = $("#emoji_input").val();
    emojireg = emojireg .replace(new RegExp(ranges.join(‘|‘), ‘g‘), ‘‘));
}
时间: 2024-10-13 20:23:17

mysql 插入emoji表情的时候报错问题。的相关文章

mysql 保存emoji时报,数据库报错:Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...' for column 'review' at row 1

错误原因:我们可以看到错误提示中的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式中的4字节编码(UTF-8编码规范).正常的汉字一般不会超过3个字节,为什么为出现4个字节呢?实际上是它对应的是智能手机输入法中的表情.那为什么会报错呢?因为mysql中的utf-8并不是真正意义上的utf-8,它只能存储1~3个字节长度的utf-8编码,如果想存储4个字节的必须用utf8mb4类型.不而要使用utf8mb4类型,首先要保证Mysql版本要不低于 MySQL 5.5.3. 常用

mysql 插入not null 没有default报错(doesn't have a default value)

今天遇到一个问题,本身在本地数据执行插入sql没啥毛病,但上了测试环境就报错!找个许久发现和mysql的配置有关.查看本地数据库 select @@sql_mode 为空,测试环境执行发现: +---------------------+| @@sql_mode          |+---------------------+| STRICT_TRANS_TABLES |+---------------------+ 这种模式下相当于给sql加入了数据,语法的校验,如果有设置not null

MySQL插入emoji表情失败问题的解决方法

前言 之前一直认为UTF-8是万能的字符集问题解决方案,直到最近遇到这个问题.最近在做新浪微博的爬虫, 在存库的时候发现只要保持emoji表情,就回抛出以下异常: Incorrect string value: '\xF0\x90\x8D\x83\xF0\x90...' 众所周知UTF-8是3个字节, 其中已经包括我们日常能见过的绝大多数字体. 但3个字节远远不够容纳所有的文字, 所以便有了utf8mb4, utf8mb4是utf8的超集, 占4个字节, 向下兼容utf8. 我们日常用的emoj

Mysql插入Emoji表情出错

Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for column 'NickName' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096) at com.mysql.j

mysql 支持emoji表情

在mysql插入emoji表情,出现错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A' for column 'content' at row 原因是当前mysql的字符集为utf-8,最多3个字节,emoji表情需要4个字节来表示.所以导致insert报错. 一般的方法是将字符集改为utf8mb4 2. utf8mb4这样的字符集需要mysql 5.5才支持,当时我的版本微5.1,所以自己去官网下了5.6的

django,mysql存储emoji表情,utf8mb4

今天在做后台的时候发现一个错误: Incorrect string value: '\\xF0\\x9F\\x90\\xA8' for column 'signature' at row 1 发现是参数里面是一个iOS的表情,也就是系统自带的emoji表情. 后台用的是django 1.6,数据库用的是Mysql 5.5.22,缓存用的是redis. 上网了解了一下emoji表情,原来一般的字符包括中文用utf8的话,mysql是用3个字节去存储的,而emoji表情要用4个字节的utf8,也就是

让MySQL支持Emoji表情 mysql 5.6

让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. mysql 版本 5.6 1 解决方案:将Mysql的编码从utf8转换成utf8mb4. 需要 >= MySQL 5.5.3版本.从库也必须是5.5的了.低版本不支持这个字符集.复制报错 2 my.cnf 文件添加 [mysqld]  character-set-server = utf8mb4  collation-server = utf8mb4_unicode_ci  init_c

mysql支持emoji表情

让MySql支持Emoji表情 解决方案:将Mysql的编码从utf8转换成utf8mb4. 需要 >= MySQL 5.5.3版本.(经检测5.5.29的也可以)低版本不支持这个字符集.复制报错 停止MySQL Server服务 修改 my.cnf或者mysql.ini [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-ha

让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)

手机端插入Emoji表情,保存到数据库时报错: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for column 'review' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.jav