gpt4 book ai didi

MySQL:使用 UUID(字节串)作为主键的查询不起作用

转载 作者:行者123 更新时间:2023-11-29 16:42:36 26 4
gpt4 key购买 nike

我在 MySQL 数据库中有一个表,它使用 UUID v1 作为主键。UUID 以 16 字节字符串的形式进行优化存储,如 https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/ 中所述。 。该列的 MYSQL 数据类型是二进制 (16)。所有 UUID 均使用 PHP 库以相同的方式生成。 MySQL 是 v5.0.12。

我从表中检索行,如下所示:

$where = sprintf("'%s'", $bytestring_uuid);

$wpdb->get_results(
"
SELECT *
FROM $my_table
WHERE id = $where
"
);

现在这通常有效,但奇怪的是,对于某些 UUID,查询失败,我不明白为什么。

以下是查询使用的一些 UUID(采用原始格式,以便您可以阅读它们):

c80615fc-e441-11e8-b328-002522a6b241

d4c94f0c-e441-11e8-9316-002522a6b241

df11cade-e441-11e8-b3a5-002522a6b241

这个失败了:

27c049c4-e67f-11e8-9e6f-002522a6b241

错误日志:

WordPress database error You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?IÄžo' at line 3 for query SELECT * FROM my_table WHERE id = 'èäAÈü³(

知道发生了什么吗?

最佳答案

27 是单引号,22 是双引号。因此,迫切需要转义二进制字符串。是的,该链接告诉您如何仅使用 16 个字节来存储它。

或者...而不是说

WHERE uuid = '?IÄžo...'

捕获十六进制并说出

WHERE uuid = UNHEX('27c049c4e67f11...');

也就是说,$byte_string 为 32 个十六进制数字。

关于MySQL:使用 UUID(字节串)作为主键的查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53269148/

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