GVKun编程网logo

MySql 中文写入数据库乱码及Incorrect string value: 'xF0x9F...' for column 'XXX' at row 1解决

17

本篇文章给大家谈谈MySql中文写入数据库乱码及Incorrectstringvalue:'xF0x9F...'forcolumn'XXX'atrow1解决,同时本文还将给你拓展(1366,"Inco

本篇文章给大家谈谈MySql 中文写入数据库乱码及Incorrect string value: 'xF0x9F...' for column 'XXX' at row 1解决,同时本文还将给你拓展(1366, "Incorrect string value: ''\\xE5\\x93\\x88\\xE5\\x93\\x88'' for column ''body'' at row 1")、1366, "Incorrect string value: '\xF0\x9F\x98\x81'、Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column、django插入数据库报错 1366, "Incorrect string value: '\xF0\x9F\x9A\xA8等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

MySql 中文写入数据库乱码及Incorrect string value: 'xF0x9F...' for column 'XXX' at row 1解决

MySql 中文写入数据库乱码及Incorrect string value: 'xF0x9F...' for column 'XXX' at row 1解决

<h3 id="一中文写入乱码问题">一、中文写入乱码问题

我输入的中文编码是 urf8 的,建的库是 urf8 的,但是插入MysqL总是乱码,一堆"???????????????????????"。可以使用以下的方式试试决解:

原URL地址是

jdbc:MysqL://localhost:3306/数据库名

改为

jdbc:MysqL://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF-8

就OK了。

做有关微信公众账号的项目时,报Incorrect string value: ''\xF0\x9F\x98\x92'' for column ''NIKENAME'' at row 1,而所有的字符编码都是 utf8,使用的数据库是 MysqL,在测试环境用得好好的,部署到线上后(使用的集群是阿里巴巴的,数据库服务器也是使用它们的,MysqL 服务器版本是 5.5.18),就报这个错了,并且这个错,时而出现,时而不出现

Emoji表情字符现在在APP已经广泛支持了。但是MysqL的UTF8编码对Emoji字符的支持却不是那么好。所以我们经常会遇到这样的异常:

Java.sql.sqlException: Incorrect string value: ''\xF0\x9F\x98\x8E'' for column ''nick'' at row 1

原因是MysqL里 urf8 编码最多只能支持3个字节,而Emoji表情字符使用的 urf8 编码,很多都是4个字节,有些甚至是6个字节。

解决的方案有两种:

  1. 使用 utf8mb4 的 MysqL 编码来容纳这些字符;
  2. 过滤掉这些特殊的表情字符。

MysqL编码来容纳这些字符">方法1:使用utf8mb4的MysqL编码来容纳这些字符

注意:要使用 utf8mb4 类型,首先要保证MysqL版本要不低于 MysqL 5.5.3。

第一步:在MysqL的安装目录下找到my.ini,作如下修改:

sql">[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''

修改后重启MysqL。

第二步:将已经建好的表也转换成 utf8mb4

sql">alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin;

将 TABLE_NAME 替换成你的表名。然后就OK了。

网上流传的一个版本增加了一个步骤,就是以 root 身份登录 MysqL,修改环境变量,将

character_set_client,character_set_connection,character_set_database,character_set_results,character_set_server

都修改成 utf8mb4。不过我没有做这一步,也正常,所以可能是这一步是多余的。

方法2:过滤掉这些特殊的字符

<pre>import org.apache.commons.lang.StringUtils;

public class charUtil {
/**

  • 替换四个字节的字符 ''\xF0\x9F\x98\x84\xF0\x9F)的解决方案 ��
    */
    public static String removeFourChar(String content) {
    byte[] conbyte = content.getBytes();
    for (int i = 0; i < conbyte.length; i++) {
    if ((conbyte[i] & 0xF8) == 0xF0) {
    for (int j = 0; j < 4; j++) {
    conbyte[i + j] = 0x30;// 0x30 int=48 字符=0
    }
    i += 3;
    }
    }
    content = new String(conbyte);
    return content.replaceAll("0000","");
    }
/**
 * 将emoji表情替换成*
 * @return 过滤后的字符串
 * 过滤的方式很简单,直接使用正则表达式匹配编码范围,然后替换就行了。
 */
public static String filterEmoji(String source) {
    if (StringUtils.isNotBlank(source)) {
        return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]","*");
    } else {
        return source;
    }
}

public static void main(String[] arg) {
    try {
        System.err.println("测试->将emoji表情替换成*");
        String text = "This is a smiley \uD83C\uDFA6 face\uD860\uDD5D \uD860\uDE07 \uD860\uDEE2 \uD863\uDCCA \uD863\uDCCD \uD863\uDCD2 \uD867\uDD98 ";
        Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank">stem</a>.out.println(text);
        Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank">stem</a>.out.println(text.length());
        Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank">stem</a>.out.println(text.replaceAll("[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]","*"));
        Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank">stem</a>.out.println(filterEmoji(text));
        //<a href="https://www.jb51.cc/tag/shuchu/" target="_blank">输出</a>结果
        //This is a smiley �� face�� �� �� �� �� �� �� 
        //45
        //This is a smiley * face�� �� �� �� �� �� �� 
        //This is a smiley * face* * * * * * * 

        Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank">stem</a>.err.println("测试->替换四个字节的字符 ''\\xF0\\x9F\\x98\\x84\\xF0\\x9F)的<a href="https://www.jb51.cc/tag/jiejuefang/" target="_blank">解决方</a>案 ��");
        String title = "ff的范德萨分��������Llfldakf;dsk。f������������daslfjdsa;lfkjdsd''j''l''f''k''d''j''sa''l''k";
        Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank">stem</a>.out.println(removeFourChar(title));
        //<a href="https://www.jb51.cc/tag/shuchu/" target="_blank">输出</a>结果:ff的范德萨分Llfldakf;dsk。fdaslfjdsa;lfkjdsd''j''l''f''k''d''j''sa''l''k

    } catch (Exception ex) {
        ex.<a href="https://www.jb51.cc/tag/printstacktrace/" target="_blank">printstacktrace</a>();
    }
}

}

(1366,

(1366, "Incorrect string value: ''\\xE5\\x93\\x88\\xE5\\x93\\x88'' for column ''body'' at row 1")

产生原因:mysql插入数据中有中文

解决方案:

https://stackoverflow.com/questions/1168036/how-to-fix-incorrect-string-value-errors

ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

1366,

1366, "Incorrect string value: '\xF0\x9F\x98\x81'

问题描述:Python从百度地图抓取消息保存到MysqL数据中,对应数据库字段为varchar以及TEXT,字符编码utf-8。部分插入成功,部分插入失败,报错如下。  
error:1366,“Incorrect string value: ‘\xF0\x9F\x98\x81’

是因为MysqL不能识别4个字节的utf8编码的字符,抛出了异常,这应该也是问题的根源。、��、类似于这种4个字节,将对应字符类型换成将对应的数据类型改为utf8mb4类型,同时连接类型也要改成utf8mb4_general_ci

https://pic.jb51.cc/2021/08-25/19/1ac5d29736b41cf0266c92084e8bee78.jpg

python 代码形式(3.6)
 conn=pyMysqL.connect(
       host=’127.0.0.1’,
       port=3306,
       user=’root’,
       passwd=’343434’,
       db=’kmind8’,
       charset=’utf8mb4’,
   )



总结

以上是小编为你收集整理的1366, "Incorrect string value: ''\\xF0\\x9F\\x98\\x81''全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

原文地址:https://www.cnblogs.com/zmdComeOn

Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column

Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column

Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column NICK_NAME

发现日志里有挺多这种错误,是什么原因造成的,是写入名称的时候会报这个错,而且''\xF0\x9F\x91\x91\xE5\xB0...''这个错误都是一样

django插入数据库报错 1366, "Incorrect string value: '\xF0\x9F\x9A\xA8

django插入数据库报错 1366, "Incorrect string value: '\xF0\x9F\x9A\xA8

 报错: 1366, "Incorrect string value: '\\xF0\\x9F\\x9A\\xA8

 

是因为MysqL不能识别4个字节的utf8编码的字符,抛出了异常,这应该也是问题的根源。☺、��、类似于这种4个字节,将对应字符类型换成将对应的数据类型改为utf8mb4类型,同时连接类型也要改成utf8mb4_general_ci.

 

解决办法
注意:直接在navicat中修改表结构的字符集和数据库的字符集都不能生效 (至少我的不行)

通过cmd进入MysqL,找到表结构,修改表结构字符集为utf8mb4

使用命令行: alter table 表名 convert to character set utf8mb4;

 

再添加djanog连接串属性:

'OPTIONS': {'charset': 'utf8mb4'},

 

 

修改完成后,插入正常。

 

补充

1、有资料说进入my.ini修改MysqL配置,实测无效

2、强调一遍,不要偷懒直接用可视化工具修改

3、如果改了MysqL的配置,尝试重启服务器,如果启动不了,就改回去

 

 

 

 

 

 

参考: (10条消息) pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x8E\\xB5\\xE9\\x9F...'_成都—大数据开发工程师—杨洋的博客-CSDN博客

 

今天关于MySql 中文写入数据库乱码及Incorrect string value: 'xF0x9F...' for column 'XXX' at row 1解决的分享就到这里,希望大家有所收获,若想了解更多关于(1366, "Incorrect string value: ''\\xE5\\x93\\x88\\xE5\\x93\\x88'' for column ''body'' at row 1")、1366, "Incorrect string value: '\xF0\x9F\x98\x81'、Caused by: java.sql.SQLException: Incorrect string value: ''\xF0\x9F\x91\x91\xE5\xB0...'' for column、django插入数据库报错 1366, "Incorrect string value: '\xF0\x9F\x9A\xA8等相关知识,可以在本站进行查询。

本文标签: