MySQL 无法在表情符号上正确分组
MySQL won't properly GROUP BY on emojis
我将单个表情符号存储在 MySQL 数据库的 CHAR
列中。该列的编码是 utf8mb4
.
当我运行这个聚合查询时,MySQL不会按表情符号字符分组。它取而代之的是 returns 带有单个表情符号的单行和数据库中所有行的计数。
SELECT emoji, count(emoji) FROM emoji_counts GROUP BY emoji
这是我的 table 定义:
CREATE TABLE `emoji_counts` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`emoji` char(1) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
是否有一些我必须考虑的特殊 Unicode 行为?
原来我需要在查询中指定扩展排序规则,即 utf8mb4_unicode_520_ci
。
这有效:
SELECT emoji, count(emoji) FROM emoji_counts group by emoji collate utf8mb4_unicode_520_ci;
编辑:该排序规则在某些服务器配置(包括 ClearDB 的)上不可用...utf8mb4_bin
似乎也有效。
我将单个表情符号存储在 MySQL 数据库的 CHAR
列中。该列的编码是 utf8mb4
.
当我运行这个聚合查询时,MySQL不会按表情符号字符分组。它取而代之的是 returns 带有单个表情符号的单行和数据库中所有行的计数。
SELECT emoji, count(emoji) FROM emoji_counts GROUP BY emoji
这是我的 table 定义:
CREATE TABLE `emoji_counts` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`emoji` char(1) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
是否有一些我必须考虑的特殊 Unicode 行为?
原来我需要在查询中指定扩展排序规则,即 utf8mb4_unicode_520_ci
。
这有效:
SELECT emoji, count(emoji) FROM emoji_counts group by emoji collate utf8mb4_unicode_520_ci;
编辑:该排序规则在某些服务器配置(包括 ClearDB 的)上不可用...utf8mb4_bin
似乎也有效。