SQLShack (Español)

publicado en: Articles | 0

en este artículo revisaremos el tipo de datos SQL varchar incluyendo una definición básica y una descripción general, diferencias con varchar(n), soporte UTF-8, intercalación, consideraciones de rendimiento y más.

Los datos juegan un papel crucial en cualquier organización y un atributo por el que se define se llama su tipo de datos. En palabras simples, el tipo de datos indica qué tipo de datos puede almacenar cualquier objeto, variable o expresión., Como desarrollador SQL, al crear una tabla SQL, tenemos que entender y decidir qué tipo de datos contendrán todas y cada una de las columnas de una tabla. Al igual que cualquier otro lenguaje de programación, SQL también admite una gama de tipos de datos que pueden contener datos enteros, datos de fecha y Hora, datos de caracteres, etc. y le permite definir tipos de datos propios también. SQL varchar es uno de los tipos de datos más conocidos y más utilizados entre todos. En este artículo, vamos a caminar a través de diferentes facetas de SQL Server varchar en el servidor SQL.

a continuación se muestra el esquema que cubriremos en este bloque.,

  1. Introducción al tipo de datos SQL Server varchar en SQL Server
  2. Uso de varchar para grandes bloques de texto
  3. ¿Qué hay de nuevo en SQL Server 2019 preview for varchar datatype?,
  4. influencia de la intercalación en varchar SQL en SQL Server
  5. UTF-8 soporte con varchar en SQL Server 2019 CTP
  6. SQL Server varchar para conversiones de datos y visualización de datos
  7. consideraciones de almacenamiento y rendimiento utilizando SQL Server varchar
  8. Impacto en la longitud de cadena de SQL varchar con funciones CAST y CONVERT

avancemos y veamos lo anterior en acción.

Entonces, ¿qué es varchar en SQL?

como su nombre indica, varchar significa datos de caracteres que varían., También conocido como carácter Variable, es un tipo de datos de cadena de longitud indeterminada. Puede contener números, letras y caracteres especiales. Microsoft SQL Server 2008 (y superior) puede almacenar hasta 8000 caracteres como la longitud máxima de la cadena utilizando el tipo de datos varchar. SQL varchar generalmente contiene 1 byte por carácter y 2 bytes más para la información de longitud. Se recomienda usar varchar como tipo de datos cuando las columnas tienen longitud variable y los datos reales son mucho menores que la capacidad dada. Cambiemos a SSMS y veamos cómo funciona varchar.,

el siguiente ejemplo crea tres variables (nombre, sexo y edad) con varchar como tipo de datos y diferentes valores que se les asignan. Como se desprende de los conjuntos de resultados que se muestran a continuación, de forma predeterminada, la longitud de cadena de las columnas VARCHAR de SQL es 1 y devuelve solo el primer valor de las variables(el resto de la cadena se trunca) cuando no se pasa Ninguna longitud de cadena para el tipo de datos varchar. La función len () se utiliza para determinar el número de caracteres almacenados en la columna varchar.

¿en qué se diferencia SQL varchar(max) de varchar(n)?,

hay ocasiones en las que los desarrolladores SQL (incluyéndome a mí mismo) suelen definir el tipo de datos varchar sin una longitud, y posteriormente, no pueden insertar registros de cadena en la tabla SQL, esto se debe a que SQL Server asigna 1 espacio de caracteres como valor predeterminado a la columna varchar que se define sin ninguna longitud. En escenarios prácticos, varchar (n) se utiliza para almacenar el valor de longitud variable como una cadena, aquí ‘n’ denota la longitud de la cadena en bytes y puede ir hasta 8000 caracteres., Ahora, vamos a seguir adelante y ver cómo podemos almacenar datos SQL varchar con una longitud de cadena en la columna de una tabla SQL. El siguiente script crea la tabla Demovarchar con algunos datos en ella. Y la pantalla de resultados muestra los registros de 7 empleados según sus departamentos, edad, etc.

supongamos que hay una nueva adición de un empleado en la organización y nosotros, como desarrolladores de datos SQL, tendríamos que insertar este nuevo registro en la tabla anterior utilizando la instrucción INSERT SQL. A continuación se muestra un ejemplo.,

1
INSERT INTO Demovarchar VALUES(‘Newton Hamilton’, ‘Isaac’,’M’,’Design Head’,69)

Oops, SQL Server encountered an error and terminated the statement saying string or binary data would be truncated., Esto ha ocurrido porque, la columna LastName varchar (10) puede contener hasta 10 caracteres y aquí estamos intentando insertar un nuevo registro con longitud de cadena(‘Newton Hamilton’) que es claramente mayor que 10 caracteres. Como solución rápida, podemos alterar la tabla y aumentar el tipo de datos de la columna SQL varchar, digamos a varchar(50) para insertar la nueva fila. Ejecute el siguiente script para alterar e insertar un nuevo registro en la tabla., Además, puede usar las funciones LEN() y DATALENGTH () para determinar el número de caracteres y el tamaño de almacenamiento en bytes respectivamente que se almacenan en la columna varchar.

observamos anteriormente cómo podemos establecer o alterar la longitud de la cadena en la columna SQL varchar para satisfacer las necesidades del negocio. Sin embargo, considere un escenario, donde no estamos seguros del tamaño de los datos que se cargarán en nuestras tablas SQL, en tales circunstancias, inspeccionar y alterar el tamaño del tipo de datos para cada columna no es una opción viable., Una de las opciones para manejar esto podría ser establecer la longitud de cadena en la barra superior en la columna VARCHAR de SQL Server (siempre que tenga una estimación aproximada de la longitud de la columna de cadena sería aproximadamente).

un punto importante a tener en cuenta, podemos usar la longitud de cadena hasta varchar(8000) solo ya que este es el número máximo de caracteres que el tipo de datos SQL varchar(n) puede contener. Así que en los casos en que hay posibilidades de que la longitud de la cadena de la columna varchar podría exceder 8000 bytes, usando varchar(8001) o cualquier cosa superior resultará en un error., One short example demonstrating this fact is shown below.

1
2

DECLARE @name AS varchar(8001) = ‘john parker d»souza’;
SELECT @name Name

SQL Server 2005 got around this limitation of 8KB storage size and provided a workaround with varchar(max)., Es un tipo de datos de caracteres de longitud variable grande no Unicode y puede almacenar un máximo de 2^31-1 bytes (2 GB) de caracteres no Unicode.

Cuando me presentaron por primera vez los conceptos de varchar(n) y SQL varchar, la pregunta común como cualquier otro principiante que tuve, fue por qué no podemos simplemente declarar una columna de tipo de datos varchar(8500) o superior, ya que tenemos varchar(max) que se encarga del almacenamiento de hasta 2 GB y por qué se supone que debemos usar varchar(<=8000) o varchar(max)?, Obtuve mis respuestas en una pequeña investigación de que SQL Server utiliza la página para almacenar datos y el tamaño de cada página es de 8 KB(excluyendo el encabezado de la página, el tamaño de los desplazamientos de fila). Si los datos a almacenar son menores o iguales a 8000 bytes, varchar (n) o varchar(max) los almacena en fila. Sin embargo, si los datos superan el tamaño de 8000 bytes, se tratan como un objeto grande(LOB) y no se almacenan en fila, sino en páginas LOB separadas(LOB_DATA)., Row en tal caso solo tendrá un puntero a la página de datos LOB donde los datos reales están presentes y SQL Server asigna automáticamente un indicador de exceso de flujo a la página para manipular las filas de datos. En pocas palabras, si sabe que los datos pueden exceder los 8000 bytes, es una mejor opción Usar varchar(max) como tipo de datos.

podemos referirnos al DMV sys. dm_db_index_physical_stats para ver qué tipo de asignación de página (IN_ROW_DATA data/LOB_DATA/ ROW_OVERFLOW_DATA) se realiza., También puede consultar este enlace en caso de que desee una explicación detallada sobre cómo SQL Server ejerce los límites de fila y página con los tipos de datos varchar(n) y varchar(max).

saltemos rápidamente a SSMS y veamos cómo podemos usar varchar (max). Ejecute el siguiente script para insertar 1 registro en el que el valor de la columna StringCol en cada fila sea de 15.000 caracteres B (es decir, 15.000 bytes).

una limitación de usar varchar(max) es que no podemos crear un índice que tenga un varchar (max) como columna clave, en su lugar, es aconsejable hacer un índice de texto completo en esa columna.,

una nota rápida para hacer – desde aquí hasta la última etapa de este artículo, mencionaremos varchar en lugar de varchar(n). No lo considere como el varchar con el valor predeterminado = 1.

para aprender algunas diferencias más interesantes entre varchar(n) y varchar(max) en SQL Server, considere revisar este artículo, comparando los tipos de datos VARCHAR(max) vs VARCHAR(n) en SQL Server.

soporte UTF-8 con SQL Server 2019 CTP

antes de profundizar en lo que la función de vista previa de SQL Server 2019 tiene que ofrecer para SQL varchar, veamos rápidamente un tipo de datos más interesante: ‘nvarchar’ primero., Al igual que SQL Server varchar, tenemos SQL nvarchar, el prefijo n en nvarchar denota Unicode, es decir, almacena datos Unicode y no Unicode. La diferencia clave entre varchar y nvarchar es la forma en que se almacenan, varchar se almacena como datos regulares de 8 bits(1 byte por carácter) y nvarchar almacena datos a 2 bytes por carácter. Debido a esta razón, nvarchar puede contener hasta 4000 caracteres y toma el doble de espacio que SQL varchar. Puede ir a través de este enlace para obtener más información sobre nvarchar en SQL Server.,

con la vista previa pública de SQL Server 2019, Microsoft ha anunciado la compatibilidad con la codificación de caracteres UTF-8 para los tipos de datos existentes (varchar y char). Para aquellos que no conocen UTF-8, significa Unicode Transformation Format y es una codificación basada en Unicode que admite muchos idiomas. El 8 en UTF – 8 significa que usa 1 byte (8 bits) para representar un carácter en memoria. Asimismo, UTF-16 utiliza 16 bits (2 bytes) para representar un carácter. Limitaremos el alcance de esta nueva mejora CTP de SQL Server 2019 a ‘SQL varchar’ solo en este artículo.,

Esta mejora tiene el siguiente impacto en SQL Server: es

  1. Mejora la compatibilidad de datos

    hasta SQL Server 2019 CTP, SQL varchar data type tenía la capacidad de almacenar solo datos no Unicode y con esta vista previa, ahora podemos crear una columna varchar para almacenar datos Unicode bajo colaciones habilitadas para UTF-8 (_UTF8). UTF-8 está permitido en los tipos de datos varchar y está habilitado al crear o cambiar la intercalación de un objeto a una intercalación con el sufijo UTF8. Esto ayuda a minimizar los problemas de conversión de caracteres.,

  2. Reducción del almacenamiento y mejoras de rendimiento

    el soporte UTF-8 para el tipo de datos varchar proporciona ahorros de almacenamiento sustanciales dependiendo del conjunto de caracteres en uso. Por ejemplo, usando una intercalación habilitada para UTF-8, cambiar el tipo de datos de columna de nvarchar(20) a varchar(20) ofrece una caída significativa en los requisitos de almacenamiento ya que nvarchar(20) requiere 40 bytes para el almacenamiento y varchar(20) necesita 20 bytes para la misma cadena Unicode.

Nota importante: dado que esta mejora aún está en Previsualización, podemos esperar más progresiones en este frente en un futuro cercano., Sin embargo, los tipos de datos Unicode (UTF-16) existentes (nchar, nvarchar y ntext) permanecen sin cambios en la vista previa de SQL Server 2019.

intercalación con SQL varchar en SQL Server 2019 CTP

La intercalación en SQL Server define configuraciones para determinar varias reglas como sensibilidad de mayúsculas y minúsculas, sensibilidad de acento, clasificación, tipos de caracteres y ancho, etc. Comprender todas estas propiedades y cómo funcionan con sus datos se vuelve muy importante. La intercalación se puede establecer a nivel de servidor, base de datos, expresión o columna., UTF-8 admite la intercalación a nivel de base de datos o a nivel de columna en SQL Server 2019 CTP y se habilita cuando se crea o cambia la intercalación de base de datos o columna a una intercalación con el sufijo UTF8.

si ejecuta la siguiente consulta en SQL Server 2019 CTP, podrá ver todas las colaciones compatibles con UTF-8 en su instancia de SQL Server utilizando function (fn_helpcollations()).,d=»284f85b8b5″>

1
2
3

SELECT Name, Description
FROM fn_helpcollations()
WHERE Name like ‘%UTF8’;

With SQL Server 2019 preview version, we can assign Unicode collations (UTF-8 supported) as well for SQL varchar columns using the COLLATE clause while declaring the varchar column., De esta manera, la intercalación específica se aplica a los datos de la columna en particular sin afectar al resto de la base de datos.

ya que estamos tratando con SQL Server varchar data type en este post, vamos a ver cómo funciona la colación de columnas con SQL varchar datatype. Ejecute el siguiente código para modificar la intercalación de columnas de SQL Server varchar de un tipo de intercalación al sufijo _UTF8. Puede leer más sobre la recopilación de bases de datos desde aquí.,TE table demovarcharcollate

(ID int PRIMARY KEY,
Description varchar(50) COLLATE LATIN1_GENERAL_100_CI_AS_SC NOT NULL
);
ALTER TABLE demovarcharcollate
ALTER COLUMN Description varchar(50) COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8 NOT NULL;

role of SQL VARCHAR in data conversions and data display

SQL Server varchar es ampliamente utilizado en la visualización de datos en los formatos deseables utilizando las funciones convert y cast en SQL Server., Los datos reales se ocupan de una mezcla de tipos de datos y tienen que ser compatibles entre sí (es decir, pertenecer al mismo tipo de datos), antes de hacer comparaciones con ellos. SQL Server admite conversiones implícitas y explícitas.

  • Nota: echa un vistazo a SQL CAST y SQL CONVERT function overview para obtener más información sobre cómo podemos realizar estas conversiones para la compatibilidad de datos.

con una necesidad incesante de formatear y mostrar datos en la salida requerida, SQL varchar es realmente útil., Como desarrollador SQL, me resulta extremadamente sencillo usar convert / cast con varchar data type para realizar asignaciones o transformaciones de datos, especialmente para los campos de fecha.

estoy usando Table FactInternetSales de la muestra dB AdventureWorksDW2017 para mostrar cómo funciona esta función. Puede referirse a cualquier tabla con algunos campos datetime y money/float para el propósito de la práctica. El siguiente script convierte dos columnas datetime a tipos SQL varchar con estilo 102 y 107 para mostrar los datos en el formato AAAA.mm.dd y Mon dd, AAAA respectivamente., Además, la columna SalesAmount con Money como tipo de datos se convierte a varchar y style 3 se aplica para mostrar la cantidad con comas como se muestra en la captura de pantalla a continuación. Además, digamos, nos gustaría ver los datos de las órdenes colocadas en el año 2010 solo, utilizando la función CAST para convertir la columna datetime a datos varchar, la comparación de cadenas se realiza en la cláusula WHERE. También puede revisar SQL convert date para encontrar más información sobre los formatos y estilos de conversión de fecha.,

impacto en la longitud de las cadenas de SQL varchar con las funciones CAST y CONVERT

SQL Server almacena datos de cadenas largas en el tipo de datos varchar comúnmente utilizado y resulta útil conocer las longitudes esperadas y máximas de las cadenas para mostrar los resultados en la interfaz de usuario. Copie y ejecute el siguiente código, donde estamos pasando una cadena larga en una variable varchar de longitud no especificada (@demovarchar) y también en otra variable con una longitud varchar definida (@demovarcharwithcast)., Microsoft toma 30 como la longitud predeterminada para SQL Varchar (con una longitud varchar no especificada) en SQL Server cuando se usa con las funciones CAST y CONVERT. En nuestro caso, a pesar de que la longitud de la cadena era 52, devolvió 30 como la longitud como se muestra en la última salida del resultado.

un punto importante a tener en cuenta aquí es que cuando se crea un campo varchar de longitud NO ESPECIFICADA, La longitud predeterminada de dicho campo es 1 (se muestra en color rojo a continuación)., Cuando varchar length no está especificado y se usa con las funciones CAST o CONVERT, el CAST o CONVERT devuelve n=30 como la longitud de cadena predeterminada de esta conversión (marcada en color azul a continuación).,le’) AS ‘LenOFStringPassed’

SELECT DATALENGTH(@demovarchar) AS ‘DefaultVarcharLength’
SELECT DATALENGtH(CAST(@demovarcharwithcast AS varchar(60))) AS ‘VarcharLengthSpecifiedWithCast’
SELECT DATALENGTH(Cast(@DEMOVARCHARWITHCAST as varchar)) as ‘defaultvarcharlengthwithcast’

consideraciones de almacenamiento y rendimiento utilizando SQL varchar

tipos de datos como varchar, Char y nvarchar se utilizan para almacenar datos de cadena en SQL Server., SQL varchar almacena longitud de cadena variable mientras que SQL char almacena longitud de cadena fija. Esto significa que SQL Server varchar solo contiene los caracteres que le asignamos y char contiene el espacio máximo de columna independientemente de la cadena que contenga.

debido a las longitudes de campo fijas, los datos se extraen directamente de la columna sin hacer ninguna manipulación de datos y las búsquedas de índices contra varchar son más lentas que las de los campos char. CHAR es mejor que VARCHAR en cuanto al rendimiento, sin embargo, toma espacio de memoria innecesario cuando los datos no tienen una longitud fija., Por lo tanto, en los casos en que el tamaño del disco no es un problema, se recomienda usar CHAR.

En palabras simples, digamos que tenemos una columna con varchar(150) = ‘SQLShack’ – esto tomará 8 bytes(sqlshack) + 2 bytes para la información de longitud = 10 bytes en real y para la columna con char(150) = ‘sqlshack’ – esto consumirá 150 bytes enteros en el disco, independientemente de lo que pasemos como una cadena. El siguiente ejemplo muestra cómo CHAR utiliza el espacio máximo asignado (150) para caber en la cadena pasada y cómo varchar columna utiliza solo el espacio necesario.,

La Línea de fondo es utilizar el tipo de datos que se ajuste a nuestra necesidad. Puede usar SQL varchar cuando los tamaños de la columna varían considerablemente, usar varchar(max) cuando hay posibilidades de que la longitud de la cadena supere los 8000 bytes, usar char cuando los tamaños de la columna son fijos y usar nvarchar si hay un requisito para almacenar datos Unicode o multilingües.

conclusión

Los tipos de datos desempeñan un papel fundamental en el diseño de bases de datos, pero a menudo se pasan por alto., Una buena comprensión y un uso preciso de los tipos de datos garantizan que la naturaleza y la longitud correctas de los datos se completen en las tablas. La intención de este consejo es ayudarlo a comprender las características y características básicas de SQL Server varchar junto con sus aspectos de rendimiento y almacenamiento en SQL Server. También cubrimos los avances recientes en SQL varchar en la vista previa de SQL Server 2019.

vea también

Puede consultar estos otros artículos para continuar su aprendizaje sobre los tipos de datos SQL.,

  • Comprender el tipo de datos GUID en SQL Server
  • Tipos de datos espaciales en SQL Server
  • Autor
  • publicaciones recientes

Gauri es un profesional de SQL Server y tiene más de 6 años de experiencia trabajando con organizaciones multinacionales globales de consultoría y tecnología. Le apasiona trabajar en temas de SQL Server como Azure SQL Database, SQL Server Reporting Services, R, Python, Power BI,Database engine, etc., Tiene años de experiencia en documentación técnica y es aficionada a la creación de tecnología.tiene una amplia experiencia en el diseño de soluciones de datos y análisis y en garantizar su estabilidad, fiabilidad y rendimiento. También está certificada en SQL Server y ha pasado certificaciones como 70-463: Implementing Data Warehouses with Microsoft SQL Server.,
ver todas las publicaciones de Gauri Mahajan

últimas publicaciones de Gauri Mahajan (ver todas)
  • explorar el modelo y los datos de Azure Analysis Services – 4 de febrero de 2021
  • Analysis Services – 13 de enero de 2021
  • connect Azure Databricks data to Power BI Desktop – 1 de junio de 2020

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *