gpt4 book ai didi

mysql - Hibernate/mysql - 批量更新返回意外的行数和 ascii 字符

转载 作者:行者123 更新时间:2023-11-29 19:16:29 25 4
gpt4 key购买 nike

我在删除 hibernate 读取的实体时遇到问题。诸如从数据库加载实体并立即删除实体而不进行任何更改之类的简单调用失败,并出现异常

org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

我最终将错误追溯到一个错误的字符串,该字符串包含以下 ASCII 字符 - 239 (0xef)、191 (0xbf) 和 189 (0xbd)。删除这些字符后,一切正常。由于 hibernate 删除调用在删除时匹配 where 子句中的所有字段,因此当字符串中存在这些字符时,调用会失败。

我们的设置中的字符编码似乎存在问题,因为 hibernate 返回的实体/列不能用作条件中 where 子句的一部分 - 或者在翻译中丢失了某些内容。

我应该做什么 - mysql 设置或 hibernate 设置,以便将来避免这些问题

最佳答案

我记得我曾经在每个 mysql session 开始时调用 SET CHARACTER SET 'utf-8'`。那是在 PHP 中。现在 Hibernate/JDBC 应该可以处理这个问题,但您仍然需要在服务器和客户端上进行设置。

参见the server configJDBC config .

您需要将数据库、连接和客户端编码全部对齐。
编辑:另请注意,表和列可能有自己的编码,因此请在 INFORMATION_SCHEMA 中进行检查。

此外,我还建议您查看 MySQL 服务器日志,我相信这些日志会告诉您它们执行查询失败,或者可能会警告无效值。

关于mysql - Hibernate/mysql - 批量更新返回意外的行数和 ascii 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42660911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com