Gemäß this verwendet SQL Server 2K5 intern UCS-2. Es kann UTF-16-Daten in UCS-2 (mit entsprechenden Datentypen, Nchar usw.) speichern, wenn jedoch ein Zusatzzeichen vorhanden ist, wird dies als 2 UCS-2-Zeichen gespeichert.Speichern von UTF-16/Unicode-Daten in SQL Server
Dies bringt die offensichtlichen Probleme mit den String-Funktionen, nämlich, dass was ein Zeichen ist wie 2 von SQL Server behandelt wird.
Ich bin etwas überrascht, dass SQL Server grundsätzlich nur mit UCS-2 umgehen kann, und noch mehr, dass dies in SQL 2K8 nicht behoben ist. Ich weiß es zu schätzen, dass einige dieser Charaktere nicht so häufig sind.
Abgesehen von den im Artikel vorgeschlagenen Funktionen, Vorschläge für den besten Ansatz für den Umgang mit den (gebrochenen) String-Funktionen und UTF-16-Daten in SQL Server 2K5.
Welche Zeichenfolge Funktionen sind bitte gebrochen? – gbn
LEN gibt die Anzahl der UCS-2-Zeichen in der Zeichenfolge zurück, nicht die Anzahl der UTF-16-Zeichen. SUBSTRING teilt UTF-16-Zeichen in zwei Hälften. Gleiches gilt für LINKS und RECHTS. UPPER und LOWER würden wahrscheinlich auch brechen. REVERSE würde definitiv brechen. CHARINDEX und PATINDEX auch. Ich bin mir nicht sicher über Unterschied und Material. So viele von ihnen .... –
Vielen Dank für das Aufzeigen. Die Tatsache, dass ALL Unicode-Zeichen nicht unterstützt wird, bedeutet, dass einige UTF-16-Zeichenfolgenwerte (z. B. von Windows oder .NET) nicht ohne Verifizierung in SQL Server übertragen werden können. Damit jede Anwendung fehlerfrei und technisch korrekt ist (wie RARE-Fehler verursachende Zeichen keinen Unterschied machen, wenn es um Korrektheit geht), müssen ALLE Zeichenketten zuvor auf UCS-2-kompatible Zeichen geprüft werden in SQL Server gespeichert werden. Wunderbar! Way, um meine Arbeit so viel schwieriger zu machen Microsoft. – Triynko