MySQL报错:Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xA8","...' for column 'obj_value' at row 1

1、插入MySQL表时,报错:Cause: java.sql.SQLException: Incorrect string value: ‘\xE6\x9D\xA8","...‘ for column ‘obj_value‘ at row 1

错误原因:参数中带有emoji表情,插入数据库时,一些特殊字符如“繁星拜月??”,插入报异常

解决思路:因为字符编码集为utf8,不支持一些basic multilingual plane和补充字符,那么如何让mysql存储emoji表情,所以需要改成utf8mb4.

2、首先确保mysql的版本不能太低:需要mysql 5.5+,select version();

下面是小编的mysql数据库的版本号

 3、查看数据库编码show variables like ‘%char%‘;

改成utf8mb4  命令语句是set character_set_server=utf8mb4

4. 将已经建好的表也转换成utf8mb4 
  命令1:ALTER TABLE `TABLE_NAME` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; (将TABLE_NAME替换成你的表名) 4. 将需要使用emoji的字段设置类型为:

命令2:ALTER TABLE `TABLE_NAME`MODIFY COLUMN `COLUMN_NAME`  text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

总结就是将服务编码 表编码  字段编码  统统改成 utf8mb4

5、但执行第4步命令1,生产又报错:Specified key was too long; max key length is 767 bytes

原因:系统变量innodb_large_prefix开启了,则对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键前缀限制为3072字节。如果禁用innodb_large_prefix,不管是什么表,索引键前缀限制为767字节。

上述的bug很明显是索引超出了限制的长度767(公司项目生产上innodb_large_prefix禁用了):

我发现报错的那张表建立了一个varchar类型的索引,字段【OBJ_ID】varchar(255)  是索引列,觉得没什么问题,其实不然,上述的767是字节,而varchar类型是字符,同时我发现我使用的字符集为(utf8mb4),这个指每个字符最大的字节数为4,所以很明显 4*255 > 767

所以就报上述错了(Specified key was too long; max key length is 767 bytes)。

解决方法:1、改变varchar的字符数,我改成了字段【OBJ_ID】varchar(100) 就可以了, 100*4 <767;2、或者启用innodb_large_prefix,那么限制值会增加到3072;

MySQL报错:Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xA8","...' for column 'obj_value' at row 1

原文地址:https://www.cnblogs.com/fanblogs/p/11221796.html

时间: 2024-10-07 22:12:06

MySQL报错:Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xA8","...' for column 'obj_value' at row 1的相关文章

mysql插入报错:java.sql.SQLException: Incorrect string value: &#39;\xE6\x9D\xAD\xE5\xB7\x9E...&#39; for column &#39;address&#39; at row 1

界面报错: 日志报错: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xAD\xE5\xB7\x9E...' for column 'address' at row 1 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.17.jar:8.0.17] at com.mys

mysql报错:java.sql.SQLException: Incorrect string value: ‘\xE4\xB8\x80\xE6\xAC\xA1...‘ for column ‘excelName‘ at row 1

一.问题 用Eclipse做项目时候报错 java.sql.SQLException: Incorrect string value: '\xE4\xB8\x80\xE6\xAC\xA1...' for column 'excelName' at row 1.而且就只有这个表的插入有问题. 二.解决 通过对比其它可以正常插入的表,发现正常的表的字符编码格式和有问题的这张表的不一样.利用Navicat工具修改字段的字符编码,问题成功解决.     原文地址:https://www.cnblogs.

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

解决java.sql.SQLException: Incorrect string value: &#39;\xE6\x88\x91\xE7\x9A\x84...&#39; for column &#39;groupName&#39;

今天使用mysql,用java程序往mysql中写数据,出现如下错误: Caused by: java.sql.SQLException: Incorrect string value: '\xD3\xCD\xBB\xAD' for column 'type' at row 1 解法: 创建每张表的时候都必须设置数据编码方式: drop table if exists we_artwork_desc; CREATE TABLE we_artwork_desc ( id VARCHAR(200),

java.sql.SQLException: Incorrect string value: &#39;\xE6\x88\x91\xE7\x9A\x84...&#39; for column &#39;groupName&#39;

java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column 'groupName' at row 1 甚是纠结,我原本以为应该是以下问题之一: (1).创建数据库的时候数据编码设置错误 (2).连接数据库的时候数据编码设置错误 对于(1),我删除来原来的数据库,重新创建一个新的数据库在设置编码时,我的设置如下: character set:utf8 -- UTF-8 Unicode

mysql 保存emoji时报,数据库报错:Caused by: java.sql.SQLException: Incorrect string value: &#39;\xF0\x9F\x98\x82\xF0\x9F...&#39; for column &#39;review&#39; 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: 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

微信表情过滤 java &quot;java.sql.SQLException: Incorrect string value: &#39;\&quot;

iOS 5.0之前,苹果都是采用3个字节来承接emoji表情,Java的普通char可以支持显示.但iOS 5.0之后, 苹果升级了系统自带的emoji表情输入法,用的Unicode 6标准来统一,是采用4个bytes来承接一个 emoji表情.如果不做处理的话,这种表情直接存储到mysql5.5以下的数据库是会报错的. 就像这两个表情一样:, 在Windows 8以下估计都不支持显示,可能会显示成框框,可能压根就是空白, 你可以在Mac中使用Safari浏览器中,就可以看到.经过测试,在Mac

nested exception is java.sql.SQLException: Incorrect string value: &#39;\xE7\x99\xBB\xE9\x99\x86...&#39; for column &#39;image&#39; at row 1

HTTP Status 500 - Hibernate operation: could not insert: [cn.itcast.shop.product.vo.Product]; uncategorized SQLException for SQL [insert into product (pname, market_price, shop_price, image, pdesc, is_hot, pdate, csid) values (?, ?, ?, ?, ?, ?, ?, ?)