Incorrect string value: '\xF0\xA1\xA1\x92' for column 'herst' at row 1

Incorrect string value: ‘\xF0\xA1\xA1\x92‘ for column ‘herst‘ at row 1【转】

1.一般来说MySQL(小于5.5.3)字符集设置为utf8,指定连接的字符集也为utf8,django中save unicode string是木有问题的。但是,当字符串中有特殊字符(如emoji表情符号,以及其他凡是转成utf8要占用4字节的字符),就会有问题,会报错Incorrect string value: ‘\xF0\x9F\x92\x90</...‘ for column ‘xxx‘ at row 1

大家都知道Unicode是一个标准,utf8是unicode一个实现方式, 某些Unicode字符转成utf8可能4字节,而在MySQl5.5.3之前,utf8最长只有3字节。

mysql> show character set;
+------------+----------------------------+------------------------+----------+
| Charset  | Description                 | Default collation   | Maxlen |
+------------+----------------------------+------------------------+----------+
| utf8          | UTF-8 Unicode          | utf8_general_ci    |      3       |
+------------+----------------------------+------------------------+----------+

所以呢,这个需要4字节才能表示的Unicode字符会被截断,存不进去。

2. 低版本Mysql<5.5.3貌似没啥好办法,把字段类型改为 MEDIUMBLOB ,   其他啥都不用改(继续保持数据库字符集和连接字符集都是utf8),问题解决。见下图,

mysql> show variables like ‘char%‘;
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

这个状态下 MEDIUMBLOB   就能搞定。

3.MySQl>=5.5.3,则可以不用像上面那么做。

3.1 修改mysql配置文件,设置默认字符集utf8mb4, 包括collation

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=‘SET NAMES utf8mb4‘

3.2 重启,确认上述配置生效

mysql> SHOW VARIABLES WHERE Variable_name LIKE ‘character\_set\_%‘ OR Variable_name LIKE ‘collation%‘;
+-------------------------------------+------------------------------+
| Variable_name                       | Value                              |
+-------------------------------------+------------------------------+
| character_set_client              | utf8mb4                         |
| character_set_connection    | utf8mb4                         |
| character_set_database      | utf8mb4                          |
| character_set_filesystem     | binary                              |
| character_set_results           | utf8mb4                          |
| character_set_server            | utf8mb4                           |
| character_set_system          | utf8                                   |
| collation_connection             | utf8mb4_unicode_ci    |
| collation_database                | utf8mb4_unicode_ci    |
| collation_server                      | utf8mb4_unicode_ci    |
+-------------------------------------+-------------------------------+

其他不用改,都用 utf8mb4 , django中任意Unicode字符都能存入MySQL。

思路:判断你的MySQL utf8最大长度是不是4,

如果不是,支不支持utf8mb4,

如果不支持,升级  or  MEDIUMBLOB

其实这个问题,网上已经太多了,没啥好写的,记一笔,仅为个人成长记录。

Incorrect string value: '\xF0\xA1\xA1\x92' for column 'herst' at row 1

时间: 2024-10-26 15:58:14

Incorrect string value: '\xF0\xA1\xA1\x92' for column 'herst' at row 1的相关文章

MySql中报错:java.sql.SQLException: Incorrect string value: &#39;\xF0\x9F\x90\xBB&#39; for column

问题描述: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xBB' for column 'nickName' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226) at com.mysql.jdbc.M

【异常处理】Incorrect string value: &#39;\xF0\x90\x8D\x83...&#39; 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.过滤掉这些特殊的表情字符. 关于

ERROR 1366 (HY000): Incorrect string value: &#39;\xD5\xC5\xC8\xFD&#39; for column &#39;name&#39; at row 1

ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1 数据库字符集问题,查看数据库状态: mysql> status; -------------- mysql  Ver 14.14 Distrib 5.6.12, for Win32 (x86) Connection id:          25 Current database:       information_

插入失败,错误提示:Incorrect string value: &#39;\xB1\xEA\xCC\xE2&#39; for column &#39;title&#39; at row 1

PHP解决乱码问题只需在连接后加入mysql_query("set names 'gbk'") 就OK!如: $conn = mysql_connect("localhost","root",""); mysql_query("set names 'gbk'"); 插入失败,错误提示:Incorrect string value: '\xB1\xEA\xCC\xE2' for column 'title'

ERROR 1366 (HY000): Incorrect string value: &#39;\xC6\xF4\xD3\xC3&#39; for column &#39;name&#39; at row 1

ERROR 1366 (HY000): Incorrect string value: '\xC6\xF4\xD3\xC3' for column 'name' at row 1 mysql>status D:\mysql6.0\bin\mysql.exe  Ver 14.15 Distrib 6.0.11-alpha, for Win64 (unknown) Connection id:          1 Current database:       bank Current user:

MySql 插入数据库报错 Incorrect string value: &#39;\xF0\xA0\x86\xA2&#39;

今天从nginx日志分析搜索关键字,然后把关键字插入到Mysql数据库里,出现如下错误 SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\xA0\x86\xA2' for column 'XXXX' at row 38; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\xA0\x86\xA2' for column

php 解决MySQL插入数据出现 Incorrect string value: &#39;\xF0\x9F\x92\x8BTi...&#39;错误

在项目中向MySQL插入数据时,发现数据插入不完整,通过调试,发现插入语句也没什么特殊的错误.但是就是差不进去,于是就打开mysqli错误的调试 $ret = mysqli_query($this->conn, $sql) or die(mysqli_error($this->conn)); 结果弹出如下错误信息: Incorrect string value: '\xF0\x9F\x92\x8BTi...' 有错误信息就好办了,结果上网一查结果是:mysql编码格式utf-8格式,不支持带四

mysql: java.sql.SQLException: Incorrect string value: &#39;\xF0\x9F\x92\x90&lt;/...&#39;

插入数据出现问题,因为包含了特殊字符. 现象: 插入的数据中如果含有某些特殊字符,会导致插入数据失败,例如字符串”测试**插入数据...“,在console中insert是正常的,但是使用java代码insert的时候报错. 原因: mysql utf-8编码最多只支持三个字节,而有的unicode字符转成utf8编码之后有4个字节,所以插入失败. 解决方案: 修改Content字段为MEDIUMBLOB(原来是varchar),并且把SELECT语句修改成 SELECT CAST(Conten

Incorrect string value: &#39;\xF0\x9F\x92\x8BTi...&#39;错误

一.背景 1.java项目,name含有表情插入到mysql数据库中报错   Incorrect string value: '\xF0\x9F\x92\x8BTi.. 2.解决办法 (1)将字符串中的不合法字符替换掉 content = content.replaceAll("[\\x{10000}-\\x{10FFFF}]", ""); (2)修改字段或者表的字符集为 utf8mb4 参考:https://stackoverflow.com/questions/