mysql 中 COLLATE 用法的问题

我这边有一个表,如下图



表字符集为GBK, 其中username 属性为unique
记录中,
id为6 记录的 username=forever
和 8记录的 username=Fòrēvèr ,在gbk字符集下,被识别为不同的字符,也就是
forever != Fòrēvèr
但是,在utf8字符集下,被视为同一字符
forever = Fòrēvèr

表中还有很多这样的记录
现在有一个需求,需要找到这种username "相同"的记录
select username from test.user group by username COLLATE utf8mb4_general_ci;

数据库报错如图

求解,如果不用collate,有没有其他的方法找出这种记录

阅读 2.6k
2 个回答
select convert(username, char character set utf8mb4) collate utf8mb4_general_ci
  from test.user
 group by convert(username, char character set utf8mb4) collate utf8mb4_general_ci;

感觉是数据库版本的问题,我这没复现你这个问题。

你可以试着先 dump 导出这个表成 SQL 文件,然后批量替换导出结果里面的 gbk_chinese_ciutf8mb4_general_ci,最后新建一个表、字符集直接选成 utf8mb4_general_ci、把数据灌进去,就正常 SELECT 好了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题