De acuerdo con this, SQL Server 2K5 usa UCS-2 internamente. Puede almacenar datos UTF-16 en UCS-2 (con tipos de datos apropiados, nchar, etc.); sin embargo, si hay un carácter suplementario, se almacena como 2 caracteres UCS-2.Almacenamiento de datos UTF-16/Unicode en SQL Server
Esto trae los problemas obvios con las funciones de cadena, concretamente que lo que es un carácter es tratado como 2 por SQL Server.
Estoy algo sorprendido de que SQL Server básicamente solo pueda manejar UCS-2, y más aún para que esto no se corrija en SQL 2K8. Aprecio que algunos de estos personajes no sean tan comunes.
Además de las funciones sugeridas en el artículo, cualquier sugerencia sobre el mejor enfoque para tratar con las funciones de cadena (rotas) y datos UTF-16 en SQL Server 2K5.
¿Qué funciones de cadena están rotas por favor? – gbn
LEN devolverá el número de caracteres UCS-2 en la cadena, no el número de caracteres UTF-16. SUBSTRING dividirá los caracteres UTF-16 por la mitad. Lo mismo aplica para IZQUIERDA y DERECHA. SUPERIOR e INFERIOR probablemente también se rompa. REVERSE definitivamente se rompería. CHARINDEX y PATINDEX también. No estoy seguro acerca de DIFERENCIA y MATERIA. Así que muchos de ellos ... –
Gracias por señalar esto. El hecho de que no sea compatible con TODOS los caracteres Unicode significa que algunos valores de cadena UTF-16 (por ejemplo, desde Windows o .NET) no son válidos para volcar en SQL Server sin verificación. Para que cualquier aplicación sea libre de errores y técnicamente correcta (la forma en que los caracteres RARE causantes de errores no hacen una pequeña diferencia en lo que respecta a la corrección), TODAS las cadenas deben validarse para que contengan caracteres compatibles con UCS-2. siendo almacenado en SQL Server. ¡Maravilloso! Forma de hacer mi trabajo mucho más difícil Microsoft. – Triynko