Me preguntaba cuáles serían las consecuencias de establecer campos NVARCHAR en MAX en lugar de un tamaño específico en SQL Server 2008, y limitar la entrada de la lógica de la aplicación. Además, ¿sería ésta una mala práctica de diseño?¿Limitar el tamaño de NVARCHAR en SQLServer?
Respuesta
NVARCHAR (MAX) es mucho mejor en rendimiento con datos más pequeños que el antiguo tipo de datos NTEXT, sin embargo, NVARCHAR (n) siempre será más eficiente en algunas áreas.
Como regla general, usar el tipo de datos que mejor represente los datos que está almacenando es casi siempre la mejor práctica.
No debe establecer todos sus campos en NVARCHAR (MAX) si sabe que nunca tendrán más de un número finito de caracteres debido a la forma en que SQL almacena este tipo de datos, datos lo suficientemente pequeños como para caber en la página se almacenará en la página, pero cuando crezca demasiado, se moverá de la página y se almacenará por separado.
Además, ¿está seguro de que necesita NVARCHAR ya que almacena datos Unicode que ocupan el doble del espacio del VARCHAR estándar? Si sabe, utilizará caracteres estándar y luego usará VARCHAR.
Slo, piense en los usos de su aplicación. Si tiene un campo de dirección que no tiene un límite teórico sobre su tamaño, ¿cómo lo imprimiría en su sobre? Usted dice que implementará la lógica en la aplicación frontal, pero ¿por qué todavía permite que la base de datos tenga datos demasiado grandes? ¿Y qué sucede si los datos entran en la base de datos que rompe la lógica en su interfaz?
Hay un montón de performance implications. En particular, en un UDF escalar de relleno de cadena de uso general, noté enormes diferencias de rendimiento donde la salida se declaró como VARCHAR (MAX), incluso aunque las entradas nunca fueran> 40 caracteres. Cambiar a VARCHAR (50) hizo una GRAN mejora.
El principal inconveniente es que NVARCHAR(MAX)
no se puede indexar con índices simples.
Además, hay algunos problemas con las variables de tipo NVARCHAR(MAX)
y con el rendimiento de las funciones que analizan estas variables.
Si solo desea almacenar y recuperar datos tal como están, y no analizarlos en el lado SQL Server
, entonces NVARCHAR(MAX)
está bien.
Seting un límite tiene un efecto secundario de algunos de validación de la longitud máx
Sólo para complementar todas las otras respuestas: ser también cuidadoso de los escenarios en los que los datos pueden provenir de otras fuentes, como - como un ejemplo - archivos de texto importados desde fuera de sus aplicaciones; esto podría pasar por alto cualquier lógica de aplicación, a menos que la duplique en las rutinas de importación ...
Excelente punto que muchos desarrolladores de aplicaciones olvidan, hay muchas formas en que los datos entran en una base de datos, toda la validación requerida debe realizarse allí a menos que desee problemas de integridad de datos. – HLGEM
- 1. ¿Tiene importancia el tamaño utilizado con NVARCHAR?
- 2. Limitar el tamaño del directorio de caché
- 3. ¿Cómo limitar el tamaño de una tabla?
- 4. ¿Cuál es el tamaño máximo que podemos dar para nvarchar en sqlite?
- 5. Limitar el tamaño del archivo en el repositorio de git
- 6. Cómo limitar el tamaño del montón?
- 7. ¿Puedo limitar el tamaño de una matriz en Scala?
- 8. Limitar el tamaño máximo de un HashMap en Java
- 9. limitar el tamaño de un archivo de carga (entrada html)
- 10. Interbloqueo SQLServer
- 11. Node.js: cómo limitar el tamaño de la solicitud HTTP y el tamaño del archivo de carga?
- 12. Conversión de nvarchar (4000) a nvarchar (max)
- 13. ¿Cómo puedo limitar el tamaño del access_log de Apache y limitar el número de registros archivados que guarda?
- 14. Rendimiento SQL: ¿Hay algún golpe de rendimiento usando NVarchar (MAX) en lugar de NVarChar (200)
- 15. nchar vs nvarchar rendimiento
- 16. Determinar el contenido varchar en columnas nvarchar
- 17. nvarchar (256) ....?
- 18. ¿Cómo limitar el tamaño del archivo de tipo de carga de archivos en PHP?
- 19. ¿Es posible limitar el tamaño de la carpeta en un entorno de Windows?
- 20. Limitar el tamaño de la consulta con el marco de entidad
- 21. Python: Limitar el tamaño de una cadena json para publicar en un servidor
- 22. ¿Cómo limitar el tamaño del conjunto de resultados en la doctrina 2?
- 23. ¿Limitar el tamaño de la cola <T> en .NET?
- 24. (NO) NULO para columnas NVARCHAR
- 25. varchar o nvarchar
- 26. Convertir/Convertir un nVarChar con Separador de Comas en Decimal
- 27. SQLServer try catch performance
- 28. Problemas para limitar el tamaño de descarga de la función cURL de PHP
- 29. ¿El equivalente de la función SQLServer SCOPE_IDENTITY() en mySQL?
- 30. sql-Concepto de cerraduras en sqlserver
Necesito NVARCHAR, son posibles los caracteres 'exóticos'. – kjv
+1 para la primera declaración. -1 por segundo. Aunque es absolutamente correcto que nvarchar use el doble del espacio de varchar, estar absolutamente seguro de que solo usará caracteres "estándar" es una suposición importante, fácilmente derrotada por, por ejemplo, campos con palabras extranjeras como nombres que contienen caracteres "extraños" . No estoy seguro de que mantener la suposición se pague en términos de espacio en disco y memoria, que es más barato por día, en comparación con el dolor de cabeza que puede traer. –
No estoy de acuerdo, es incorrecto poner limitaciones en el db. El software siempre debe manejar la validación y la base de datos tiene la libertad de crecer cuando sea necesario sin ningún cambio en la base de datos. – freggel