簡體   English   中英

MySql 在 INSERT INTO 時生成相同的 UUID... SELECT

[英]MySql generating the same UUID when INSERT INTO… SELECT

我有這個錯誤只發生在生產服務器上(當然)。 我無法在任何機器上復制它。

假設我必須執行這樣的查詢

INSERT INTO my_table(UUID, Name, Surname) SELECT UUID(), Name, Surname FROM other_table

我希望任何新生成的行都有不同的 UUID,這正是在任何環境中發生的情況。 除了生產。

在那里,如果我運行該查詢,MySQL 會生成所有相同的 UUID。 看起來像這樣,它不是為每一行生成一個新的,而是只運行 function 一次,然后復制該值。

我很確定這是由於某種配置,但我不明白是哪一個。

此外,它可能不嚴格與 MySQL 相關:如果我從我的 PC 上運行查詢,但在使用 SQLyog 的生產服務器上運行,查詢工作正常並生成所有不同的 UUID。

會不會是 PHP 故障? 我目前正在使用 mysqli 驅動程序。

為了清楚起見,如果我從我的電腦上運行這個查詢

SELECT UUID()
FROM (SELECT 1 AS id UNION ALL
      SELECT 1 AS id UNION ALL
      SELECT 1 AS id UNION ALL
      SELECT 1 AS id UNION ALL
      SELECT 1 AS id UNION ALL
      SELECT 1 AS id UNION ALL
      SELECT 1 AS id UNION ALL
      SELECT 1 AS id UNION ALL
      SELECT 1 AS id UNION ALL
      SELECT 1 AS id
     ) i

結果是

bb79716f-f0ba-11e9-a154-f23c91fbfa4a
bb79717a-f0ba-11e9-a154-f23c91fbfa4a
bb79717c-f0ba-11e9-a154-f23c91fbfa4a
bb79717e-f0ba-11e9-a154-f23c91fbfa4a
bb79717f-f0ba-11e9-a154-f23c91fbfa4a
bb797181-f0ba-11e9-a154-f23c91fbfa4a
bb797183-f0ba-11e9-a154-f23c91fbfa4a
bb797185-f0ba-11e9-a154-f23c91fbfa4a
bb797187-f0ba-11e9-a154-f23c91fbfa4a
bb797189-f0ba-11e9-a154-f23c91fbfa4a

但是如果我在服務器上使用 PHP 運行相同的查詢,結果是

0aef9b78-f0bc-11e9-bfe5-7a7919257c79
0aef9b78-f0bc-11e9-bfe5-7a7919257c79
0aef9b78-f0bc-11e9-bfe5-7a7919257c79
0aef9b78-f0bc-11e9-bfe5-7a7919257c79
0aef9b78-f0bc-11e9-bfe5-7a7919257c79
0aef9b78-f0bc-11e9-bfe5-7a7919257c79
0aef9b78-f0bc-11e9-bfe5-7a7919257c79
0aef9b78-f0bc-11e9-bfe5-7a7919257c79
0aef9b78-f0bc-11e9-bfe5-7a7919257c79
0aef9b78-f0bc-11e9-bfe5-7a7919257c79

並不是這個問題的完美答案,但如果有人遇到同樣的問題,可以通過解決方法來解決。 只需在 MySQL 中創建一個“new_uuid”function,使用它而不是內置的。 這邊走

CREATE FUNCTION new_uuid() RETURNS VARCHAR(36) CHARSET utf8 BEGIN   RETURN UUID();  END;

然后你可以使用它而不是 UUID()

SELECT new_uuid()

如果您有多行,它將正確返回不同的 UUID。

這是我解決問題的唯一方法。 不知道為什么:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM