【发布时间】:2020-04-15 19:24:54
【问题描述】:
我有下表(mariadb:10.3):
CREATE TABLE `people` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`public_id` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
`uuid` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`slug` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`old_slug` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `people_uuid_unique` (`uuid`),
UNIQUE KEY `people_slug_unique` (`slug`),
UNIQUE KEY `people_public_id_unique` (`public_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
当我对该表运行以下查询时,我得到以下结果。由于某种原因,字符串中的第一个数字与 ID 匹配,ID 是一个自动递增的整数。
查询:
select * from `people` where `id` = "1f028a28-f032-482b-a8b4-dc5483489552"
结果:
+----+-------------+--------------------------------------+-------------+-------------------------+---------------------+---------------------+
| id | public_id | uuid | name | slug | created_at | updated_at |
+----+-------------+--------------------------------------+-------------+-------------------------+---------------------+---------------------+
| 1 | 8ipui1pn9ln | 52ea30f4-cafa-4ddb-8b74-1502a34c3c21 | Mark Hamill | 8ipui1pn9ln-mark-hamill | 2020-04-15 18:47:33 | 2020-04-15 18:47:35 |
+----+-------------+--------------------------------------+-------------+-------------------------+---------------------+---------------------+
请注意,这是精简的示例。我在整数中搜索字符串的真正原因是因为我在使用 OR 搜索多个列的动态值。
【问题讨论】:
-
请注意,为了便于理解,精简版可能会使用 '3c21' 这样的 id 而不是 '52ea30f4-cafa-4ddb-8b74-1502a34c3c21'。
-
当然,“名字”不能是
UNIQUE。