我有一个包含二进制 (16) 格式 UUID 列的表,我需要更新所有旧条目,但未设置该值。尝试查询:
UPDATE sometable SET uuid=UNHEX(REPLACE(UUID(), '-', '')) WHERE uuid IS NULL;
并且在仅更新一行后返回这样的错误:
Duplicate entry '\xAD\x15\xEAoT\xAB\x11\xE7\x9B\x0F\xF0yYry\xD5' by key 'uuid'
有什么方法可以更新所有行?我将不胜感激...
最佳答案
我遇到了完全相同的问题。
最终出现了以下问题:
如果无法更改 DB 字符集,则在图片中添加 CONVERT() 即可解决:
UPDATE sometable SET uuid=UNHEX(REPLACE(CONVERT(UUID() using utf8mb4), '-', '')) WHERE uuid IS NULL;
-------------------------------------------------- - - - 编辑 - - - - - - - - - - - - - - - - - - - - - - ----------------- 我找到了另一种方法来解决这个问题,这可能是首选。
显然,如果我们知道这一点并且 DBs 已经设置了正确的字符集和排序规则,我们就不会遇到这些问题。
现在改变这些似乎太冒险了,而且可能需要做很多工作。
因此,下一个最佳选择是通过添加以下选项在 JDBC 连接中定义这些选项:
?sessionVariables=character_set_client=utf8mb4,character_set_results=utf8mb4,character_set_connection=utf8mb4,collation_connection=utf8_general_ci
IE。:jdbc:mariadb://localhost/dbName?sessionVariables=character_set_client=utf8mb4,character_set_results=utf8mb4,character_set_connection=utf8mb4,collation_connection=utf8_general_ci
引用:https://jira.mariadb.org/browse/CONJ-417?focusedCommentId=91133&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-91133
https://stackoverflow.com/a/51393124/5154619
关于mysql - SQL - 在 UPDATE QUERY 上 REPLACE(UUID) 时重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44622947/