Frage

Die Frage ist, Armenisch. Ich bin mit SQL Server 2005, Sortierung SQL_Latin1_General_CP1_CI_AS, Daten sind meist in Armenisch und wir können nicht Unicode verwenden.

ich auf MS SQL getestet 2008 mit einer Windows-Sortierung für armenische Sprache (Cyrillic_General_100_) habe ich hier gefunden, ( http://msdn.microsoft.com/en-us/library/ms188046.aspx ), aber es hat nicht geholfen.

Ich habe eine Funktion, dass Aufträge Hex-Werte und eine untere Funktion, die jedes Zeichen in jeder Zeichenfolge nimmt und wandelt sie in das untere Form ist, aber es ist nicht akzeptable Lösung, es ist wirklich langsam arbeitet, ruft die Funktionen auf jeder Spalte ein großer Tisch.

Gibt es eine Lösung für dieses Problem nicht Unicode verwenden und nicht mit Hex-Werten arbeiten manuell?

UPDATE:

Auf der linken Seite sind gemischte Fall Worten, in der richtigen Reihenfolge sortiert und mit Kleinbuchstaben Darstellungen auf der rechten Seite. Hoffe, dass dies dazu beitragen wird. Danke dir. Wörter werden in Unicode geschrieben.

  1. ԱբԳդԵզ -> աբգդեզ

  2. ԱգԳսԴԼ -> ագգսդլ

  3. ԲաԴֆդԴ -> բադֆդդ

  4. ԳԳԼասա -> գգլասա

  5. ԴմմլօՏ -> դմմլօտ

  6. ԵլԲնՆն -> ելբննն

  7. ԶՎլուտ -> զվլուտ

  8. էԹփձջՐ -> էթփձջր

  9. ԸխԾդսՂ -> ըխծդսղ

  10. ԹԶէըԿր -> թզէըկր

War es hilfreich?

Lösung

Eine Lösung wäre eine berechnete Spalte für jede Textspalte zu erzeugen, die den Wert in armenischen Kollation umwandelt und setzt es in Kleinbuchstaben wie folgt:

Alter Table TableName
    Add TextValueArmenian As ( LOWER(TextColumn COLLATE Latin1_General_CI_AS) ) PERSISTED

Wenn Sie dies tun, können Sie Indizes für diese Spalten und Abfrage für sie setzen.

Wenn das nicht Ihr Geschmack von Tee, dann wäre eine andere Lösung, die eine indizierte Sicht, wo Sie eine Ansicht mit SCHEMABINDING erstellen, die jede der verschiedenen Spalten wirft Fall und auf der rechten Seite Sortierung zu senken und dann setzen Indizes für diese Ansicht .

Bearbeiten ich in Ihren Beispielen feststellen, dass Ihre Groß- und Kleinschreibung verwenden, Accent empfindlich. Vielleicht ist die einfache Lösung für Ihre Bestellung Fragen wäre Latin1_General_CS_AS oder Cyrillic_General_100_CS_AS zu verwenden, wenn verfügbar.

Bearbeiten

Puh. Nach einem recht wenig Forschung, glaube ich, eine Antwort, die leider nicht Sie wollen sein kann. Erstens, ja kann ich kopieren Sie den Text, den Sie in dem Code oder so etwas wie Notepad ++ zur Verfügung gestellt, weil Stackoverflow codiert wird unter Verwendung von UTF-8 und Armenisch paßt in UTF-8. Zweitens ist diese Hinweise auf das, was Sie zu erreichen versuchen: Speichern von UTF-8 in SQL Server. Leider unterstützt, SQL Server 2008 (oder eine frühere Version) nicht native UTF-8. Um zu speichern Daten in UTF-8, haben Sie eine Handvoll Möglichkeiten:

  1. Bewahren Sie es in binären und wandeln es in UTF-8 auf dem Client (was ziemlich beseitigt jede auf dem Server erfolgt die Sortierung)
  2. Bewahren Sie es in Unicode und wandeln es in UTF-8 auf dem Client. Es sollte beachtet werden, dass der SQL Server-Treiber wird bereits die meisten Strings in Unicode konvertieren und Ihr Beispiel funktioniert fein in Unicode. Der offensichtliche Nachteil ist, dass es doppelt so viel Platz frisst.
  3. Erstellen Sie eine CLR benutzerdefinierten Typ in SQL Server zum Speichern von UTF-8-Werte. Microsoft stellt eine Probe, die mit SQL Server kommt zu tun, nur diese. Sie können von hier die Proben von CodePlex herunterladen. Sie können auch weitere Informationen über die Probe in diesem Artikel in der

Andere Tipps

Sie haben einen Fehler wie diese zu erhalten?

Msg 448, Level 16, State 1, Line 1
Invalid collation 'Cyrillic_General_100_'.

Versuchen Sie:

ORDER BY Name COLLATE Cyrillic_General_100_CI_AS

oder wählen Sie die gewünschte aus dieser Liste bevorzugen:

select * from fn_helpcollations()
where name like 'Cyrillic_General_100_%'
scroll top