我有一个表,其中包含二进制(16)格式的UUID列,我需要更新所有旧条目,未设置该值。尝试查询:
UPDATE sometable SET uuid=UNHEX(REPLACE(UUID(), '-', '')) WHERE uuid IS NULL;
在仅更新一行后,它会返回如下错误:
重复输入' \ xAD \ x15 \ xEAoT \ xAB \ x11 \ xE7 \ x9B \ x0F \ xF0yYry \ xD5'按键' uuid'
更新所有行的方法有哪些?我将非常感谢你的帮助......
答案 0 :(得分:0)
UUID()
仅对语句进行一次评估。所以所有行(需要更改)都获得相同的值。
您是否愿意与我们分享SHOW CREATE TABLE
?我可能会告诉你不要使用uuids。
答案 1 :(得分:0)
我遇到了完全相同的问题。 最终成为一个问题:
如果您不能更改数据库字符集,则将CONVERT()添加到图片即可解决该问题:
UPDATE sometable SET uuid=UNHEX(REPLACE(CONVERT(UUID() using utf8mb4), '-', '')) WHERE uuid IS NULL;
-------------------------------------------- ------------编辑------------------------------------- -----------------------
我找到了另一种解决方法,这可能是首选。
显然,如果我们知道这一点,并且数据库已经设置了正确的字符集和排序规则,那么我们就不会遇到这些问题。
现在更改这些图标似乎太冒险了,可能还有很多工作。 因此,下一个最佳选择是通过添加以下选项来定义JDBC连接中的那些:
?sessionVariables=character_set_client=utf8mb4,character_set_results=utf8mb4,character_set_connection=utf8mb4,collation_connection=utf8_general_ci
即:
jdbc:mariadb://localhost/dbName?sessionVariables=character_set_client=utf8mb4,character_set_results=utf8mb4,character_set_connection=utf8mb4,collation_connection=utf8_general_ci
答案 2 :(得分:0)
从2.2.4开始,MariaDB连接器使用utf8mb4(4字节上正常的ut8),这不是问题(实际上避免了很多问题...)
问题驻留在MySQL 5.6 / 5.7中。根据排序规则,UUID被错误地评估。使用utf8mb4会出现此问题。 https://i.stack.imgur.com/ICGtX.png那里报告了错误。