本篇文章给大家谈谈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解决
- (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解决
<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),就报这个错了,并且这个错,时而出现,时而不出现
做有关微信公众账号的项目时,报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个字节。
解决的方案有两种:
- 使用 utf8mb4 的 MysqL 编码来容纳这些字符;
- 过滤掉这些特殊的表情字符。
MysqL编码来容纳这些字符">方法1:使用utf8mb4的MysqL编码来容纳这些字符
注意:要使用 utf8mb4 类型,首先要保证MysqL版本要不低于 MysqL 5.5.3。
第一步:在MysqL的安装目录下找到my.ini,作如下修改:
[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
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, "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, "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
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 NICK_NAME
发现日志里有挺多这种错误,是什么原因造成的,是写入名称的时候会报这个错,而且''\xF0\x9F\x91\x91\xE5\xB0...''这个错误都是一样
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等相关知识,可以在本站进行查询。
本文标签: