【发布时间】:2018-10-06 09:47:44
【问题描述】:
我正在使用带有 InnoDB 的 MySQL 8 和带有 mysql2 驱动程序的节点服务器。
我的桌子是这样的:
CREATE TABLE IF NOT EXISTS users(
id VARCHAR(36) NOT NULL,
name VARCHAR(32) NOT NULL,
email VARCHAR(255) NOT NULL,
...
PRIMARY KEY (id)
)
我不使用自动增量,并且作为 VARCHAR id,我使用基于时间的 UUID。
如果我现在执行 SELECT 查询:
SELECT * FROM users where id = 'some valid id';
我得到了我的预期结果。
如果我这样做:
SELECT * FROM users where id = '0';
我什么也得不到,因为我的表中没有任何 id 的值为 '0'。
但是,如果我这样做:
SELECT * FROM users where id = 0;
我得到最后插入的行,当然,它有一个不同于 0 的有效 VARCHAR id。
这种行为是偶然发生在我的节点服务器上的,因为 JS 有时会在 http 查询中将 undefined 解释为 0。 因此,我可以很容易地避免在我的查询中插入 0(我现在所做的),但我想了解为什么会发生这种情况。
【问题讨论】:
-
您能否举例说明第三种情况
where id = 0;的查询返回的此类 ID 的示例?