Actualmente en nuestra base de datos SQL Server 2012, estamos usando varchar
, y nos gustaría cambiar eso nvarchar
. He generado un script para hacer eso.
Mi pregunta es ¿hay alguna diferencia en cómo SQL Server escribe en varchar
columnas frente a nvarchar
columnas? Tenemos varios procedimientos de backend que me preocupan.
Editar:
no estoy seguro de si esto ayuda, pero las columnas no tienen índices, f / k o restricciones en ellas.
sql-server
varchar
Chris L
fuente
fuente
Respuestas:
Debe asegurarse de prefijar los literales de cadena Unicode con un prefijo N. Por ejemplo, estos funcionarán de manera diferente si el tipo de datos subyacente es
NVARCHAR
:Resultados:
Para aquellos en dispositivos móviles o navegadores decrépitos que muestran caracteres de cuadro en lugar de caracteres Unicode reales, esto es lo que parece:
fuente
La mayor preocupación es que
nvarchar
usa 2 bytes por carácter, mientras quevarchar
usa 1. Por lo tanto,nvarchar(4000)
usa la misma cantidad de espacio de almacenamiento quevarchar(8000)
*.Además de todos los datos de tus personajes que necesitan el doble de espacio de almacenamiento, esto también significa:
nvarchar
columnas más cortas para mantener las filas dentro del límite de la fila de 8060 bytes / límite de columna de caracteres de 8000 bytes.nvarchar(max)
columnas, se eliminarán de la fila antes devarchar(max)
lo que lo haría.nvarchar
columnas más cortas para mantenerse dentro del límite de clave de índice de 900 bytes (no sé por qué querría utilizar una clave de índice tan grande, pero nunca se sabe).Además de eso, trabajar con
nvarchar
no es muy diferente, suponiendo que el software de su cliente esté diseñado para manejar Unicode. SQL Server convertirá unvarchar
a denvarchar
forma transparente , por lo que no necesita estrictamente el prefijo N para los literales de cadena a menos que esté usando caracteres de 2 bytes (es decir, Unicode) en el literal. Tenga en cuenta que la fundiciónnvarchar
avarbinary
rendimientos resultados diferentes haciendo lo mismo convarchar
. El punto importante es que no tendrá que cambiar inmediatamente cada literal varchar a un literal nvarchar para que la aplicación funcione, lo que ayuda a facilitar el proceso.* Si utiliza la compresión de datos (la compresión de fila ligera es suficiente, se requiere Enterprise Edition antes de SQL Server 2016 SP1 ), generalmente encontrará
nchar
ynvarchar
no ocupará más espacio que ,char
yvarchar
debido a la compresión Unicode (utilizando el algoritmo SCSU) .fuente
Piense que las siguientes son diferencias importantes:
fuente
Se requirió nvarchar para RDP Merge Replication de una base de datos móvil a SQL Server 2005. También LTrim (), RTrim () y Trim () se usaron mucho bc nvarchar no recortó () espacios automáticamente desde la entrada de datos, mientras que Varchar sí .
No sé si eso ha cambiado en los últimos años o no, pero nvarchar es ahora el estándar utilizado para los inicios de sesión del sitio web de membresía simple de .NET en VS Pro 2017 utilizado en la base de datos generada.
fuente
Si usa NVarchar sobre Varchar y no tiene ningún requisito para admitir MULTI-LINQUAL, aumentará el almacenamiento para DB, copias de seguridad (locales y externas). Las bases de datos modernas deben ser compatibles con ambos y cualquier impacto de conversión debe considerarse en el diseño.
fuente