¿Cuáles son las ventajas y desventajas del uso de la nvarchar(max) vs NText tipos de datos en SQL Server? No necesito de compatibilidad con versiones anteriores, por lo que es bien que nvarchar(max) no se admite en los anteriores de SQL Server libera.

Edición: al Parecer, la pregunta también se aplica a TEXT y IMAGE vs varchar(max) y varbinary(max), para aquellos que buscan para los tipos de datos más tarde.

8 Comentarios

  1. 190

    Las ventajas son que se puede usar funciones como LEN y LEFT en nvarchar(max) y no se puede hacer eso contra ntext y text. También es más fácil trabajar con nvarchar(max) de text donde había que usar WRITETEXT y UPDATETEXT.

    También, text, ntext, etc., se va a quedar en desuso (http://msdn.microsoft.com/en-us/library/ms187993.aspx)

    • SQL Server 2016 al parecer, todavía los apoyan.
    • Históricamente, es el texto y nText mayores datos tipo de datos varchar y nvarchar en cuanto a su existencia en SQL Server se refiere?
    • Usted no TIENE que usar WRITETEXT y UPDATETEXT. Tal vez en el 2010 se hizo! Interesados para más información.
  2. 37

    VARCHAR(MAX) es lo suficientemente grande como para dar cabida a TEXT campo. TEXT, NTEXT y IMAGE tipos de datos de SQL Server 2000 será obsoleto en la versión futura de SQL Server, SQL Server 2005 proporciona la compatibilidad de los tipos de datos, pero se recomienda el uso de nuevos tipos de datos que son VARCHAR(MAX), NVARCHAR(MAX) y VARBINARY(MAX).

  3. 32

    ntext siempre va a almacenar sus datos en una base de datos independiente de la página, mientras que nvarchar(max) se trate de almacenar los datos dentro de la base de datos de registro en sí.

    Así nvarchar(max) es algo más rápido (si tiene texto que es menor de 8 kB). También me di cuenta de que el tamaño de base de datos crecerá un poco más lento, esto también es bueno.

    Ir nvarchar(max).

  4. 12

    nvarchar(max) es lo que usted desea utilizar. La mayor ventaja es que se pueden utilizar todas las T-SQL funciones de cadena en este tipo de datos. Esto no es posible con ntext. No soy consciente de ninguna desventajas reales.

    • Lo que no entiendo es que dicen que ir con nvarchar(max) pero que me limita a 4000 caracteres. ¿Y si quiero un campo que guarda más que eso?
    • nvarchar(max) no se limita a 4000 caracteres. Usted tiene un número ilimitado de caracteres. Además, el texto y ntext han sido desaprobados por SQL Server. Esto significa que en una futura versión, que dejarán de ser compatibles.
    • La OCI, estoy utilizando SQL Server CE, que HACE de límite de mi nvarchar(max) 4000 caracteres. Así que para SQL Server Compact, no tengo más remedio que usar el ntext en algunos casos. Cuando se detenerlo, supongo que tendré que cambiar algunos sitios.
    • nvarchar(max) no es un espacio de almacenamiento ilimitado. Según la documentación de SQL Server «max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB). El tamaño de almacenamiento en bytes, es dos veces la longitud real de los datos introducidos + 2 bytes.»
  5. 4

    La mayor desventaja de Text (junto con NText y Image) es que se quitará en una versión futura de SQL Server, como por la documentación. De que forma, el esquema más difícil actualizar cuando se que versión de SQL Server se dará a conocer.

  6. 3

    Quería añadir mi experiencia con la conversión. Tenía muchas text campos en la antigua Linq2SQL código. Esto iba a permitir text columnas presentes en los índices a ser reconstruido en LÍNEA.

    Primero he conocido acerca de los beneficios durante años, pero siempre supuse que la conversión significaría algo atemorizante largo de consultas de SQL Server tendría que reconstruir la tabla y copiar todo lo más, trayendo abajo de mis sitios web y elevar mi frecuencia cardiaca.

    Yo también estaba preocupado de que el Linq2SQL podría provocar errores si es que estaba haciendo algún tipo de verificación de la columna tipo.

    Feliz de informar que el ALTER comandos devuelven al INSTANTE, así que definitivamente están cambiando solamente la tabla de metadatos. Puede haber algunas trabajar offline sucediendo a traer <8000 de datos de carácter volver a estar en la mesa, pero el comando ALTER fue instantánea.

    Me encontré con las siguientes para buscar todas las columnas de la necesidad de conversión:

    SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] VARCHAR(MAX)'), table_name, column_name
    FROM information_schema.columns where data_type = 'TEXT' order by table_name, column_name
    
    SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] NVARCHAR(MAX)'), table_name, column_name
    FROM information_schema.columns where data_type = 'NTEXT' order by table_name, column_name

    Esto me dio una buena lista de consultas, que he seleccionado y copiado a una nueva ventana. Como he dicho – se ejecuta este fue instantánea.

    nvarchar(max) vs NText

    Linq2SQL es bastante antigua – se utiliza un diseñador que arrastra tablas en. La situación puede ser más compleja para la EF Code first, pero no he abordado el tema todavía.

  7. 1

    Quiero añadir que puede utilizar el .ESCRIBIR de la cláusula parcial o completa de las actualizaciones y de alto rendimiento anexa a varchar(max)/nvarchar(max) tipos de datos.

    Aquí usted puede encontrar ejemplo completo de uso de .WRITE cláusula.

Dejar respuesta

Please enter your comment!
Please enter your name here