php - MySql 在 INSERT INTO ... SELECT 时生成相同的 UUID
问题描述
我有这个错误只发生在生产服务器上(当然)。我无法在任何机器上复制它。
假设我必须执行这样的查询
INSERT INTO my_table(UUID, Name, Surname) SELECT UUID(), Name, Surname FROM other_table
我希望任何新生成的行都有不同的 UUID,这正是在任何环境中发生的情况。除了生产。
在那里,如果我运行该查询,MySQL 会生成所有相同的 UUID。看起来像这样,它不是为每一行生成一个新的,而是只运行一次函数,然后复制该值。
我很确定这是由于某种配置,但我不明白是哪一个。
此外,它可能与 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 相同的问题,并试图使用@bimbo1989 提出的解决方案。
我花了一个小时尝试不同的解决方案,结果发现,这些 UUID 看起来一样,但实际上,三个字符赋予了唯一性 (6,7,8)。
确保 UUID 是否相同或只是看起来相同。
推荐阅读
- python - 在打开的文件上使用 pd.read_csv
- sql - Oracle 查询输出不正确
- r - 如何用R提取点和括号之间的句子?
- ruby-on-rails - 传递阿拉伯语单词时的轨道切割字符串
- tensorflow - 在 Keras 中创建 CNN 模型架构图
- java - 如何检查网络服务器是否已启动?
- python - python 正则表达式模式
- linux - 如何解决函数调用中的 gcc [-Werror=format-security]?
- google-cloud-dataflow - 将 Pub/Sub 连接到 Dataflow Python 管道
- angular - ion-select 在自定义组件的 ng-content 内部时未更新