【问题标题】:MySQL won't properly GROUP BY on emojisMySQL 不会在表情符号上正确 GROUP BY
【发布时间】:2016-03-18 15:23:57
【问题描述】:

我将单个表情符号存储在 MySQL 数据库的 CHAR 列中。该列的编码是utf8mb4

当我运行这个聚合查询时,MySQL 不会按表情符号字符分组。而是返回带有单个表情符号的单行以及数据库中所有行的计数。

SELECT emoji, count(emoji) FROM emoji_counts GROUP BY emoji

这是我的表定义:

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 行为吗?

【问题讨论】:

  • 查询从哪里运行?你知道你在进入的路上是否正确编码吗?还是说表本身的数据好?
  • 现在,直接通过 Sequel Pro 上的控制台运行查询。表格中的数据看起来不错 - 表情符号通过 SELECT * FROM emoji_counts 查询正确显示

标签: mysql unicode emoji


【解决方案1】:

原来我需要在查询中指定一个扩展的排序规则,即utf8mb4_unicode_520_ci

这行得通:

SELECT emoji, count(emoji) FROM emoji_counts group by emoji collate utf8mb4_unicode_520_ci;

编辑:该排序规则在某些服务器配置(包括 ClearDB)上不可用...utf8mb4_bin 似乎也可以工作。

【讨论】:

  • 这太可怕了。
猜你喜欢
  • 2013-05-18
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 2012-07-05
  • 2021-11-08
相关资源
最近更新 更多