如何在 Sqlite 中实现重音/变音符号不敏感搜索? [复制]

Posted

技术标签:

【中文标题】如何在 Sqlite 中实现重音/变音符号不敏感搜索? [复制]【英文标题】:How to implement the accent/diacritic insensitive search in Sqlite? [duplicate] 【发布时间】:2010-10-21 06:14:18 【问题描述】:

有没有办法在 sqlite 中进行重音/变音符号不敏感搜索?

谷歌搜索,我找到了this,但我真的不知道如何在 C# 中创建我的“排序函数”。我正在尝试为 Sqlite 创建 pt-br 排序规则...

【问题讨论】:

道格的回答对您有帮助吗?如果是,请分享您如何设法进行不区分重音/变音符号的搜索? 【参考方案1】:

虽然可以编写自己的排序规则,但这可能比使用合适的系统提供的排序规则要慢 - 例如,SQL_Latin1_General_CP1_CI_AS 不能满足您的需求吗?如果是这样,只需使用合适的 COLLATE 子句(在您的 SELECT 或 CREATE TABLE 查询中使用......),您应该已经准备好了。

【讨论】:

这种排序规则在 SQlite 中是否可用?【参考方案2】:

如果您使用的是 System.Data.Sqlite,您可以使用自定义排序规则并根据需要对其进行修改……例如:

/// <summary>
/// User-defined collating sequence using the current UI culture.
/// </summary>
[SQLiteFunction(Name = "MYSEQUENCE", FuncType = FunctionType.Collation)]
class MySequence : SQLiteFunction

  public override int Compare(string param1, string param2)
  
    return String.Compare(param1, param2, true);
  

使用上述自定义排序规则的 SQL 查询可能如下所示: SELECT * FROM MyTable ORDER BY MyChineseColumn COLLATE MYSEQUENCE DESC

(来源:http://sqlite.phxsoftware.com/forums/p/862/3779.aspx#3779)

您只需在创建表时设置排序规则并在该列上构建索引。 但请记住,您将无法从其他未定义排序规则的 sqlite 引擎访问表。

【讨论】:

以上是关于如何在 Sqlite 中实现重音/变音符号不敏感搜索? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C - 如何避免变音符号/重音敏感问题

Ruby 超级不敏感的正则表达式将学校名称与口音和其他变音符号匹配

如何从 .NET 中的字符串中删除变音符号(重音符号)?

如何从 .NET 中的字符串中删除变音符号(重音符号)?

在 JavaScript 中删除字符串中的重音符号/变音符号

LUA:如何正确读取带有重音字母和变音符号的 UFT8 文件名和路径?