为了账号安全,请及时绑定邮箱和手机立即绑定

PostgreSQL是否支持“重音不敏感”排序规则?

PostgreSQL是否支持“重音不敏感”排序规则?

慕田峪9158850 2019-07-10 15:07:41
PostgreSQL是否支持“重音不敏感”排序规则?在MicrosoftSQLServer中,可以指定“重音不敏感”排序规则(用于数据库、表或列),这意味着可以进行类似于SELECT * FROM users WHERE name LIKE 'João'若要找到带有Joao名字,姓名。我知道,可以在PostgreSQL中使用非重音串函数,但我想知道PostgreSQL是否支持这些“重音不敏感”的排序规则,因此SELECT上面会有用的。
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我确信PostgreSQL依赖底层操作系统进行整理。它是吗?支撑创建新的排序规则,和自定义排序规则..不过,我不知道你会做多少工作。(可能很多。)


查看完整回答
反对 回复 2019-07-10
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

不,PostgreSQL不支持这种排序规则。

PostgreSQL不支持这样的排序规则(重音不敏感与否),因为除非事物是二进制相等的,否则任何比较都不能返回相等。这是因为在内部,它会给诸如散列索引之类的事情带来许多复杂性。因此,最严格意义上的校对只影响排序而不是平等。

解决办法

非重音词的全文搜索词典。

对于FTS,可以使用unaccent,

CREATE EXTENSION unaccent;CREATE TEXT SEARCH CONFIGURATION mydict ( COPY = simple );
ALTER TEXT SEARCH CONFIGURATION mydict  ALTER MAPPING FOR hword, hword_part, word  WITH unaccent, simple;

然后你可以用一个函数索引来索引,

-- Just some sample data...CREATE TABLE myTable ( myCol )
  AS VALUES ('fóó bar baz'),('qux quz');-- No index required, but feel free to create oneCREATE INDEX ON myTable  
  USING GIST (to_tsvector('mydict', myCol));

现在您可以非常简单地查询它。

SELECT *FROM myTableWHERE to_tsvector('mydict', myCol) @@ 'foo & bar'

    mycol    
-------------
 fóó bar baz(1 row)

另见

自己不带口音。

这个unaccent模块也可以在不进行FTS集成的情况下自行使用,以进行检查。欧文的回答


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 666 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信