2009-02-23 14 views
16

Estaba creando una tabla en SQL Server CE y me di cuenta de que no es compatible con varchar.¿Por qué SQL Server CE no es compatible con varchar?

Al ver esto, encontré que "las columnas de texto no Unicode (varchar, char, text) y smallmoney no son compatibles, aunque se admiten nvarchar, nchar, ntext y money" como stated at MSDN.

¿Es esto cierto? ¿Por qué es esto, exactamente? Parecería que una base de datos compacta soportaría tipos de datos que toman 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?

Respuesta

11

Probablemente sea porque Windows CE está completamente basado en Unicode y todas sus cadenas se almacenan de esa manera.

10

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 son compatibles con Unicode.

Pero eso no significa automáticamente que se necesitan 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 usa 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.

+0

Gran respuesta. Tenía curiosidad, (pero no me preocupaba) de cómo se almacenaba físicamente. – enorl76

Cuestiones relacionadas