En MySQL, el OCTET_LENGTH()
La función devuelve la longitud de una cadena, medida en bytes.
Esta función es en realidad un sinónimo de LENGTH()
.
Sintaxis
La sintaxis básica es así:
OCTET_LENGTH(str)
Donde str
es la cadena para la que desea que se devuelva la longitud.
Ejemplo
SELECT OCTET_LENGTH('Cat');
Resultado:
+---------------------+ | OCTET_LENGTH('Cat') | +---------------------+ | 3 | +---------------------+
Este es el mismo resultado que obtendríamos si usáramos CHAR_LENGTH()
función. Sin embargo, el OCTET_LENGTH()
La función puede devolver resultados diferentes, según el tipo de datos.
Tipos de datos
Cuando consulta una base de datos, el OCTET_LENGTH()
La función puede devolver un resultado diferente, según el tipo de datos. Las cadenas Unicode devuelven el doble de bytes. Las cadenas UTF-8 pueden variar.
Este es un ejemplo del uso de UTF-8:
SELECT CHAR_LENGTH(_utf8 '€'), OCTET_LENGTH(_utf8 '€');
Resultados:
+--------------------------+---------------------------+ | CHAR_LENGTH(_utf8 '€') | OCTET_LENGTH(_utf8 '€') | +--------------------------+---------------------------+ | 1 | 3 | +--------------------------+---------------------------+
En este caso, la longitud del carácter es 1, pero la longitud del octeto es 3 bytes.
En el siguiente ejemplo, consultamos una base de datos. En este caso, el ArtistName
la columna usa varchar(255) tipo de datos:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Así que el resultado se ve así:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 3 | +--------------------------+
Sin embargo, si cambiamos la columna a ucs2
, cada carácter estará representado por un código Unicode de 2 bytes y, por lo tanto, el resultado será diferente.
Para demostrarlo, podemos modificar la tabla de esta manera:
SELECT OCTET_LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Ahora, si lo consultamos de nuevo:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Resultado:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 6 | +--------------------------+
Blancos finales
El OCTET_LENGTH()
La función cuenta los espacios en blanco finales (como los espacios al final de la cadena). Entonces, si agregamos un espacio al final del primer ejemplo, obtenemos el siguiente resultado:
SELECT LENGTH('Cat ');
Resultado:
+----------------+ | LENGTH('Cat ') | +----------------+ | 4 | +----------------+
Blancos iniciales
Obtenemos el mismo resultado con espacios en blanco iniciales (por ejemplo, espacios al comienzo de la cadena):
SELECT LENGTH(' Cat');
Resultado:
+----------------+ | LENGTH('Cat ') | +----------------+ | 4 | +----------------+
A menos, por supuesto, que usemos una función como TRIM()
, RTRIM()
, o LTRIM()
para recortar el espacio en blanco.
Ejemplo:
SELECT LENGTH(RTRIM('Cat '));
Resultado:
+-----------------------+ | LENGTH(RTRIM('Cat ')) | +-----------------------+ | 3 | +-----------------------+
Más ejemplos
Estos son algunos ejemplos de varias cadenas:
SELECT OCTET_LENGTH('Quiet Riot') AS 'Result 1', OCTET_LENGTH('') AS 'Result 2', OCTET_LENGTH('1234 7') AS 'Result 3', OCTET_LENGTH(' ') AS 'Result 4', OCTET_LENGTH(TRIM(' ')) AS 'Result 5';
Resultado:
+----------+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | Result 5 | +----------+----------+----------+----------+----------+ | 10 | 0 | 7 | 3 | 0 | +----------+----------+----------+----------+----------+
Tenga en cuenta que los resultados 4 y 5 son diferentes porque usé TRIM()
función para recortar el espacio en blanco del resultado 5. Dado que la cadena solo consta de espacios en blanco, la longitud de la cadena recortada es 0
.
Transact-SQL (para SQL Server, Azure) tiene una función similar a LENGTH()
de MySQL y OCTET_LENGTH()
funciones, pero en T-SQL se llama DATALENGTH()
.