执行Mysql存储过程报错java.sql.SQLException: Incorrect string value


记录程序执行存储过程报错后的排查方法及解决方案


一、报错信息

java.sql.SQLException: Incorrect string value: '\xE6\x9C\xAA\xE7\x9F\xA5' for column 'city_a' at row 2
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809)
	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1811)
	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1725)
	at com.focustar.util.JDBCConnection.save(JDBCConnection.java:333)
	at com.focustar.util.JDBCConnection.Save(JDBCConnection.java:61)
	at com.focustar.dao.UserDao.insertWeixinUser(UserDao.java:942)
	at com.focustar.util.s.e(MainHandlerUtil.java:1421)
	at com.focustar.util.s.d(MainHandlerUtil.java:1387)
	at com.focustar.util.s.a(MainHandlerUtil.java:97)
	at com.focustar.itr.thread.JedisConsumeThread.run(JedisConsumeThread.java:111)

二、场景

1、执行报错的存储过程是从另一个数据库拷贝过来的

2、执行报错的存储过程在原数据库或代码上执行是正常的


三、排查

1、将报错的存储过程sql拷贝后到navicat执行

执行结果:

1.1、执行的存储过程如果传递的参数有中文,执行报错

1.2、执行的存储过程如果传递的参数没有中文,执行正常


猜测:是字符编码的问题

2、查看数据库的字符编码:show variables like ‘character%’;


结果:

1、出问题的数据库:character_set_server = latin1

2、没出问题的数据库:character_set_server = utf8

在这里插入图片描述


四、原因

是字符编码的问题


五、解决

方法1、修改mysql的字符编码,将:character_set_server = latin1改为character_set_server = utf8
具体方法请自行百度

方法2、指定存储过程字符类型参数的字符编码【建议使用,影响力度最小】
city_a Varchar(50) CHARACTER SET utf8


六、例

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.sql.SQLException: Incorrect string value: '\xAC\xED\x00\x05sr...' for column 'content' at row 1 是一个数据库错误。这个错误通常发生在尝试将一个包含特殊字符或无法存储的字符串值插入到数据库列中时。引用都提到了这个错误。 具体原因可能是数据库列的字符集不支持该特殊字符,或者该字符超出了列的允许长度。解决这个问题的方法包括以下几个步骤: 1. 确认数据库和表的字符集设置。首先,确保数据库的字符集和表的字符集与要插入的数据兼容。可以通过查询数据库和表的字符集属性来验证这一点。 2. 调整列的字符集和长度。如果字符集不兼容或长度不足以容纳特殊字符,可能需要修改列的字符集和长度。这可能需要重新创建表或更改列的定义。 3. 转义特殊字符。如果特殊字符无法直接存储,可以尝试转义该字符,以便可以正确存储。具体的转义方法取决于数据库和编程语言的不同。 4. 修改数据库连接的字符集设置。有时候,错误可能是由于数据库连接的字符集设置不正确所致。可以尝试修改数据库连接的字符集设置,以便与要插入的数据兼容。 5. 更新数据库服务或驱动程序版本。有时候,这种错误可能是由于数据库服务或驱动程序的bug所致。在这种情况下,更新数据库服务或驱动程序的版本可能会解决问题。 需要注意的是,解决这个错误的具体方法取决于具体的情况。建议先仔细检查错误信息和相关错误堆栈跟踪,然后根据具体情况采取相应的解决方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [「Jenkins Pipeline」- java.sql.SQLException: Incorrect string value: ‘\xAC\xED\x00\x05sr...‘ for ...](https://blog.csdn.net/u013670453/article/details/113254126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [MySQL存储表情时报错java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A…’的...](https://download.csdn.net/download/weixin_38685876/13703258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值