mysql数据库 WHERE
在处理像emojis这样的4字节字符时,似乎不能像预期的那样工作。以下是如何从mysql workbench复制:
-- Enable utf8mb4 in MySQL workbench
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
CREATE TABLE `mytable` (
`id` INT NOT NULL AUTO_INCREMENT,
`text` TEXT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4;
INSERT INTO `mytable` (`text`) VALUES
("ABC"), ("?"), ("?"), ("??");
SELECT `text` FROM `mytable`
WHERE `text` = "?";
预期结果
+------+
| text |
+------+
| ? |
+------+
实际结果
+------+
| text |
+------+
| ? |
| ? | <-- ??
+------+
我已经在5.6.32和5.7.20中验证了这种行为。
请告诉我发生了什么事。谢谢
2条答案
按热度按时间6jygbczu1#
您需要更新的排序规则:
“unicode\u ci”基于unicode 4.0unicode_520_ci“基于5.20版。
另请参见:https://stackoverflow.com/a/43692337
ie3xauqp2#
这不是一个mysql错误,而是一个关于collate是什么的很好的教训,正确设置它很重要。比较字符串时使用排序规则。
collate子句可以在select语句中使用
或者table被永久性地改变了
它也可以在创建表时设置