into - ¿Por qué SQL Server CE no es compatible con varchar?
sql server split string delimiter (2)
Probablemente sea porque Windows CE está completamente basado en Unicode y todas sus cadenas se almacenan de esa manera.
Estaba creando una tabla en SQL Server CE y me di cuenta de que no es compatible con varchar.
Al analizar esto, encontré que "las columnas de texto que no son Unicode (varchar, char, text) y smallmoney no son compatibles, aunque se admiten nvarchar, nchar, ntext y money" como se indica en MSDN .
¿Es esto cierto? ¿Por qué es esto, exactamente? Parecería que una base de datos compacta admitiría tipos de datos que requieren menos bytes para almacenar ... Supongo que se necesita más espacio para guardar los caracteres Unicode.
¿Cuál es el razonamiento detrás de esto?
Creo que estaban tratando de reducir su espacio de implementación y simplificar la interfaz. Eso y, probablemente, tratar de evitar tener que implementar más versiones de los archivos DLL (versiones Unicode vs no Unicode).
Y sí, es cierto que solo admiten Unicode.
Pero eso no significa automáticamente que tome 2 bytes para almacenar. Puede codificar eso en la capa de la base de datos para básicamente quitar el primer byte cuando no es necesario. Muchos motores de base de datos hacen esto como un medio de compresión en Unicode.
Simplemente significa que las entradas que sí usan el conjunto de dos bytes tienen una pequeña sobrecarga de un marcador adicional que le dice al motor que la secuencia está usando dos bytes. De lo contrario, un solo byte puede almacenarse en el disco y expandirse como parte de la lectura RowData.
La mayoría de las bases de datos compactas siempre usan una forma de compresión de longitud de ejecución cuando colocan bytes en el disco para ahorrar espacio. El formato en el que lo ve cuando sale del motor rara vez coincide con lo que realmente está almacenado en el disco.