【发布时间】:2019-04-06 23:51:42
【问题描述】:
使用CHARACTER SET ascii COLLATE ascii_bin 会稍微快一些,很多表都可以正常工作。这是一个例子:
CREATE TABLE `session` (
`id` CHAR(64) NOT NULL,
`created_at` INTEGER NOT NULL,
`modified_at` INTEGER NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `user`(`id`)
) CHARACTER SET ascii COLLATE ascii_bin;
但如果我要加入:
CREATE TABLE `session_value` (
`session_id` CHAR(64) NOT NULL,
`key` VARCHAR(64) NOT NULL,
`value` TEXT,
PRIMARY KEY (`session_id`, `key`),
CONSTRAINT FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON DELETE CASCADE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
会发生什么?逻辑告诉我它应该是无缝的,因为 ASCII 是 UTF-8 的子集。人性告诉我,从核心转储到屏幕上出现的消息Follow the white rabbit.,我可以期待任何事情。 ¯\_(ツ)_/¯
【问题讨论】:
-
same 表中的不同列可以不同
CHARACTER SET和/或COLLATION。每当您在两个不同的表中具有“相同”值时,使这些列 same;不要依赖“子集”规则。
标签: mysql utf-8 character-encoding ascii query-performance