gpt4 book ai didi

mysql - SQL - 在 UPDATE QUERY 上 REPLACE(UUID) 时重复

转载 作者:行者123 更新时间:2023-12-04 12:36:44 24 4
gpt4 key购买 nike

我有一个包含二进制 (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'



有什么方法可以更新所有行?我将不胜感激...

最佳答案

我遇到了完全相同的问题。
最终出现了以下问题:

  • 数据库字符集
  • MariaDB J/Connector 从 2.2.4 版开始的更改
  • UUID() 和字符串处理函数的组合(如 REPLACE())

  • 如果无法更改 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/

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