首页 > 解决方案 > PHP 可以模仿 MySQL utf8mb4_0900_ai_ci 排序规则吗?

问题描述

我在 MySQL 中有一个表:

results
-----------
word   VARCHAR(200) UNIQUE [collation: utf8mb4_0900_ai_ci]
count  INT

我有一个聚合 word+count 元组的 PHP 脚本,但它必须以匹配utf8mb4_0900_ai_ci排序规则的方式进行。这是因为这个聚合的结果会被插入到表中,我必须防止重复。

$tuples = [
   "Cafe"=>5,
   "Cafe"=>1,
   "Café"=>3,
   "Café"=>4,
];
// Should result in:
//     ["Café"=>13"]  <-- picks the version with the most counts: Café
// AND NOT
//     ["Cafe"=>6, "Café"=>7]  <-- these will be treated as duplicates in MySQL
$results = aggregateCounts($tuples);

在这个例子中,我可以让 PHP 通过替换来对元组进行分组é--e但我更愿意准确地模仿 MySQL 所做的以确定字符是否重复,给定排序规则utf8mb4_0900_ai_ci.

我该怎么做呢?

我能想到的唯一万无一失的解决方案是在 MySQL 本身中执行聚合——不幸的是,鉴于我将要聚合的数据的大小,这在我的用例中是不可能的。

标签: phpmysqlunicodecollation

解决方案


推荐阅读