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

标签 mysql sql mariadb

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

    相关文章:

    mysql - 如何创建一个规则以在 bool 列中的许多假之间只接受一个真?

    mysql - Laravel Eloquent - 获取属于另一个表的表的条目

    PHP上传多个文件名不同但文件夹相同的文件

    php - MySQL访问超时错误

    php - DDBB 结构,以便我可以管理播放列表 - 当前、上一个、下一个

    mysql - 创建表时出现 MARIADB 错误 1064 (42000)

    MySQL 从有关系但没有连接的表中选择

    php - 使用 SQL 语句将三个表连接在一起以从每个表中获取数据

    c# - Linq to entities 无法识别方法 system.string get_Item

    mysql - mariaDB 外键未形成 - varchar 不是签名/未签名问题