2009-04-23 6 views
2

Existe-t-il un moyen de faire une recherche accent/diacritique insensible dans sqlite? Sur Google, j'ai trouvé this, mais je ne sais pas comment créer ma "fonction de collation" en C#. J'essaie de créer la collation pt-br pour Sqlite ...Comment implémenter la recherche accent/diacritique insensible dans Sqlite?

+1

Est-ce que la réponse de Doug vous a aidé? Si oui, s'il vous plaît partagez comment vous avez réussi à faire une recherche accent/diacritique insensible? – Trainee4Life

Répondre

-2

Bien qu'il soit possible d'écrire votre propre collation, cela peut être plus lent qu'avec un système fourni - SQL_Latin1_General_CP1_CI_AS ne répond pas à vos besoins , par exemple? Si c'est le cas, utilisez simplement les clauses COLLATE appropriées (que ce soit sur vos requêtes SELECT ou CREATE TABLE ...) et vous devriez tous être définis.

+1

Cette collation est-elle disponible dans SQlite? – Trainee4Life

6

Si vous utilisez System.Data.Sqlite vous pouvez utiliser une séquence de classement personnalisé et de le modifier pour vos besoins ... un exemple:

/// <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); 
    } 
} 

Votre requête SQL pour utiliser la séquence de classement personnalisé ci-dessus pourrait ressembler à ceci: SELECT * FROM MyTable ORDER BY MyChineseColumn COLLATE MYSEQUENCE

DESC

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

Vous ne pouvez définir le classement à la création de la table et de construire des indices sur tha t colonne. Mais rappelez-vous, vous ne serez pas en mesure d'accéder à la table d'autres moteurs sqlite où le classement n'est pas défini.

Questions connexes