sql >> Base de Datos >  >> RDS >> Mysql

Cómo funciona la función OCTET_LENGTH() en MySQL

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() .