sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona LENGTH() en MariaDB

En MariaDB, LENGTH() es una función de cadena incorporada que devuelve la longitud del argumento de cadena dado.

Cuando está en modo predeterminado, la longitud de la cadena se mide en bytes. Pero cuando está en modo Oracle, se mide en caracteres.

Sintaxis

La sintaxis es así:

LENGTH(str)

Donde str es la cadena para la que se devolverá la longitud.

Ejemplo

He aquí un ejemplo básico:

SELECT LENGTH('café');

Resultado:

+-----------------+
| LENGTH('café')  |
+-----------------+
|               5 |
+-----------------+

En este caso, la cadena tenía cuatro caracteres, pero LENGTH() devolvió 5 .

Esto se debe a que el último carácter usa dos bytes y estoy usando el modo SQL predeterminado (my sql_mode=DEFAULT ). Cuando está en el modo SQL predeterminado, LENGTH() devuelve el número de bytes.

Modo oráculo

Cambiar al modo Oracle da como resultado LENGTH() devolviendo solo la cantidad de caracteres en la cadena (en lugar de la cantidad de bytes).

Cambiemos nuestra sesión al modo Oracle:

SET SESSION sql_mode='ORACLE';

Y ahora ejecutemos el anterior LENGTH() ejemplo de nuevo:

SELECT LENGTH('café');

Resultado:

+-----------------+
| LENGTH('café')  |
+-----------------+
|               4 |
+-----------------+

Esta vez devuelve el número de caracteres (4) en lugar del número de bytes (5).

Cuando está en modo Oracle, LENGTH() devuelve el mismo resultado que CHAR_LENGTH() y su sinónimo, CHARACTER_LENGTH() .

Comparación con CHAR_LENGTH() y BIT_LENGTH()

Volvamos al modo predeterminado:

SET SESSION sql_mode=DEFAULT;

Aquí hay una comparación rápida entre LENGTH() cuando está en el modo predeterminado, CHAR_LENGTH() y BIT_LENGTH() que devuelve el número de bits en una cadena:

SELECT 
    LENGTH('อ'),
    CHAR_LENGTH('อ'),
    BIT_LENGTH('อ');

Resultado:

+---------------+--------------------+-------------------+
| LENGTH('อ')   | CHAR_LENGTH('อ')   | BIT_LENGTH('อ')   |
+---------------+--------------------+-------------------+
|             3 |                  1 |                24 |
+---------------+--------------------+-------------------+

Este carácter tailandés ( ) usa 3 bytes, y por lo tanto LENGTH() devuelve 3 .

CHAR_LENGTH() devuelve 1 , porque sigue siendo un solo carácter, y BIT_LENGTH() devuelve el número de bits (24 ).

Nuevamente, si hubiéramos estado en modo Oracle, LENGTH() habría devuelto lo mismo que CHAR_LENGTH() .

Sin cadenas

Si el argumento no es una cadena, se convierte en una cadena.

Aquí hay otro ejemplo que usa un número:

SELECT LENGTH(1234);

Resultado:

+--------------+
| LENGTH(1234) |
+--------------+
|            4 |
+--------------+

Argumentos nulos

Pasando null devuelve null :

SELECT LENGTH(null);

Resultado:

+--------------+
| LENGTH(null) |
+--------------+
|         NULL |
+--------------+

Argumento faltante

Llamando a LENGTH() sin pasar un argumento da como resultado un error:

SELECT LENGTH();

Resultado:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LENGTH'