In einem Projekt, an dem ich gerade arbeite, werden meine Daten in SQL Server mit der Sortierung Danish_Norwegian_CI_AS
gespeichert. Die Daten werden über FreeTDS und ODBC an Python ausgegeben, das die Daten als UTF-8 behandelt. Einige der Zeichen, wie å, ø und æ, werden nicht korrekt codiert, wodurch der Projektfortschritt zum Erliegen kommt.
Ich habe ein paar Stunden damit verbracht, über die verwirrende Welt von Codierungen, Sortierungen und Codeseiten zu lesen, und habe das Gefühl, dass ich das ganze Bild besser verstanden habe.
Einige der Artikel, die ich gelesen habe, lassen mich denken, dass es möglich wäre: In der SQL-Select-Anweisung anzugeben, dass die Kollationsdaten in UTF-8 codiert werden sollen, wenn es ausgegeben wird.
Der Grund, warum ich denke, dass das möglich ist, ist dieser Artikel > zeigt ein Beispiel, wie man zu Tabellen mit verschiedenen Kollatierungen kommt, um gut zusammen zu spielen.
Irgendwelche Zeiger in Richtung der Umwandlung von Kollationen in UTF-8 / UTF-16 würden sehr geschätzt!
BEARBEITEN: Ich habe gelesen, dass SQL Server eine Unicode-Option über nchar
, nvarchar
und ntext
bereitstellt, und dass die anderen Stringvariablen char
, varchar
und text
entsprechend der Menge codiert sind Kollation. Ich habe auch gelesen, dass die oben genannten Unicode-Optionen in utf-16 Variante UCS-2 codiert sind (ich hoffe, ich erinnere mich, dass richtig). Damit; Um Tabellen der Locale-Sortierung und Unicode zu ermöglichen, sollte es eine Konvertierungsfunktion geben, nein?
4 Monate später fand ich endlich die Antwort auf mein Problem. Es stellte sich heraus, dass es nichts mit dem FreeTDS-Treiber oder der Datenbanksortierung zu tun hatte:
Es war pyodbcs Verbindungsfunktion, die anscheinend eine Flagge erfordert; unicode_results=True
Hier veröffentlicht, um anderen unglücklichen Seelen zu helfen, die ziellos im Dunkeln herumwandern und nach einem Hinweis suchen.
Es scheint, dass SQL UTF-8 nicht unterstützt (siehe hier ), aber Sie können versuchen, die Sortierung in der Auswahl wie folgt zu ändern:
%Vor%Sie können die Akzente auch mit dieser Lösung entfernen: Wie Akzente und alle Zeichen entfernen & lt; & gt; a..z in sql-server?
Eine andere Lösung könnte darin bestehen, Ihre Spalte nach nvarchar zu übertragen
%Vor%Dabei steht Konto für varchar in Ihrer ursprünglichen Tabelle.
Wenn Sie zum Beispiel versuchen:
%Vor%Das Endergebnis ist "т"
Tags und Links sql-server utf-8 collation unicode pyodbc