[Postgres]如何按中文拼音排序并且可包含表情符?

一般情况,是用
ORDER BY convert_to(name, 'GBK'))
来以中文 name排序,但是如果name包含表情符就会出错

难道说排序的时候我先把 name 的表情符先用 regexp_replace 掉吗?How?

[:emoji:] 这是我知道的唯一相关的知识了。

这个还是第一次见,但是好像不对啊?

我暂时的想法是,先用 node.js 把所有表情符都去除掉(主要是名字)

我不懂编程,也不懂数据库 :sweat_smile: 正则也只是用到哪儿学到哪儿。

你可以尝试换个思路:剔除非中文字符,然后再筛选。

中文字符[\u4e00-\u9fa5]、双字节字符[^\x00-\xff]

是的,我在搜索的答案也很多是跟正则有关系,但是好像表情符还没有通用的表情符规则,这个代表表情符的表达式通常都很长,怕会漏掉什么,或者以后又增加了新的标签费

还是反向操作吧,提前把 GBK 不能覆盖的字符都剔除出去。

居然没能顺利完成!我确实去掉了表情符,但是有些中文也会出错!!

如这个 字(我也没见过,不知道读什么)。。。

可能我要认输:放弃按中文拼音排序的想法?

中文 GBK 是按拼音排序的吗?这还真不知道,哈哈。

建议别放弃,我有做过中文文件名排序的事,是用php输出目录下文件名(显示在org-mode里),但排序和windows资源管理器不一样,资源管理器是用中文拼音排序,感觉这样更合理。

不知道怎么实现拼音排序,于是就定义了一个php数组,["啊"=>"a","阿"=>"a","埃"=>"ai","挨"=>"ai","哎"=>"ai"…],把gb2312定义的一级汉字3755个都列了出来,这样中文转拼音在排序就和资源管理器差不多了。

表情符不知道怎么排,但正常的文件名或人名应该很少有会用表情符号的

我最后是直接在获取数据后再用 node.js 去排序了(localCompare)
我现在是尽量每个请求都用Postgres的数据库函数处理,现在算是尝到了滋味,想得没错!(我在做的网站也并不算很简单,但node 的代码除去公用的函数也就两三百行,其它都用数据库的 Functions or Procedure 解决,而这个拼音排序问题解决不了所以交由JS来解决,放到前端解决也是可以的)

这个拼音排序好像比我那个一个字一个字的遍历数组转拼音排序要好得多

如果不需要处理多音字,这个其实很简单,找一个汉字转拼音的库,数据库创增加一个独立的字段保存拼音,就可以了。