2009-06-25 8 views
2

Je suis nouveau à Unicode dans Microsoft SQL Server 2005/2008. J'ai converti ma base de données pour utiliser NVarChar() au lieu de VarChar(). J'ai trouvé à ma grande surprise que le tri est différent de VarChar(). J'ai trouvé cette autre référence ici sur StackOverflow, pour SQL Sorting and hyphens qui explique que le tri Unicode est fait sur une base "mot". Après d'autres recherches, j'ai trouvé le site Unicode Consortium (www.unicode.org), en particulier le site Unicode Text Segmentation (www.unicode.org/reports/tr29) qui en discute, et il mentionne le trait d'union comme un cas particulier. . (Désolé, en tant que nouvel utilisateur, je ne pouvais pas poster d'hyperliens pour ceux-ci).T-SQL Unicode "mot" définition

Mais ce que j'essaie de définir est exactement ce que sont les règles pour les différents classements, en particulier pour les classements en anglais américain. Quels autres cas spéciaux y a-t-il? Par exemple, est-ce que le trait d'union est le seul caractère ignoré? Ou que dire de la ponctuation, comme les apostrophes?

Tous les liens ou pointeurs seront grandement appréciés.

+1

S'il vous plaît accorder plus d'attention à la balise suggérer des invites. Il n'y avait que 7 autres tags 't-sql' et plus de 1000 'tsql'. Que pensez-vous correct, dans ce contexte? –

+0

Upvote pour la question, cependant. Je ne le savais pas à propos de l'Unicode: vous apprenez quelque chose tous les jours. –

+0

Vous avez raison. J'ai reçu la balise "T-SQL" d'une autre question, et je n'ai pas pensé à chercher la variante "TSQL". Je m'en souviendrai pour la prochaine fois. –

Répondre

1

N'utilisez pas un classement SQL; utilise un Windows. Ceci est mentionné dans the KB article.

De "Windows Collation Sorting Styles":

Pour les classements Windows, le nchar, nvarchar et ntext types de données Unicode ont le même comportement de tri comme char, varchar et texte non -Unicode types de données.

Cependant, vous devriez également considérer pourquoi vous avez unicode. En plus de vos problèmes de tri, il est plus lent: varchar vs nvarchar performance et even MS agreee

+0

Je comprends les classements Windows par rapport aux classements SQL. Ce que j'essaie de savoir, c'est exactement ce que sont les règles pour les classements de Windows (les saveurs non-BIN). Le trait d'union est ignoré, et j'essaie de trouver une définition d'autres règles comme ça. En outre, vous avez un point sur la vitesse, mais c'est une histoire pour un autre jour. En pratique, nous n'avons pas vu de baisse de performance pour notre configuration. –