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 varcharcolumnas frente a nvarcharcolumnas? 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
nvarcharusa 2 bytes por carácter, mientras quevarcharusa 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:
nvarcharcolumnas 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.nvarcharcolumnas 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
nvarcharno es muy diferente, suponiendo que el software de su cliente esté diseñado para manejar Unicode. SQL Server convertirá unvarchara denvarcharforma 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ónnvarcharavarbinaryrendimientos 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á
ncharynvarcharno ocupará más espacio que ,charyvarchardebido 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