MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como LENGTH() funciona no MariaDB


No MariaDB, LENGTH() é uma função de string interna que retorna o comprimento do argumento de string fornecido.

Quando no modo padrão, o comprimento da string é medido em bytes. Mas quando no modo Oracle, é medido em caracteres.

Sintaxe


A sintaxe fica assim:
LENGTH(str)

Onde str é a string para a qual o comprimento será retornado.

Exemplo


Segue um exemplo básico:
SELECT LENGTH('café');

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

Nesse caso, a string tinha quatro caracteres, mas LENGTH() retornou 5 .

Isso ocorre porque o último caractere usa dois bytes e estou usando o modo SQL padrão (meu sql_mode=DEFAULT ). Quando no modo SQL padrão, LENGTH() retorna o número de bytes.

Modo Oráculo


Mudar para o modo Oracle resulta em LENGTH() retornando apenas o número de caracteres na string (em oposição ao número de bytes).

Vamos mudar nossa sessão para o modo Oracle:
SET SESSION sql_mode='ORACLE';

E agora vamos executar o LENGTH() anterior exemplo novamente:
SELECT LENGTH('café');

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

Desta vez, ele retorna o número de caracteres (4) em vez do número de bytes (5).

Quando estiver no modo Oracle, LENGTH() retorna o mesmo resultado que CHAR_LENGTH() e seu sinônimo, CHARACTER_LENGTH() .

Comparação com CHAR_LENGTH() e BIT_LENGTH()


Vamos voltar ao modo padrão:
SET SESSION sql_mode=DEFAULT;

Aqui está uma comparação rápida entre LENGTH() quando no modo padrão, CHAR_LENGTH() e BIT_LENGTH() que retorna o número de bits em uma string:
SELECT 
    LENGTH('อ'),
    CHAR_LENGTH('อ'),
    BIT_LENGTH('อ');

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

Este caractere tailandês ( ) usa 3 bytes e, portanto, LENGTH() retorna 3 .

CHAR_LENGTH() retorna 1 , porque ainda é apenas um único caractere e BIT_LENGTH() retorna o número de bits (24 ).

Novamente, se estivéssemos no modo Oracle, LENGTH() teria retornado o mesmo que CHAR_LENGTH() .

Não-Strings


Se o argumento não for uma string, ele será convertido em uma string.

Aqui está outro exemplo que usa um número:
SELECT LENGTH(1234);

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

Argumentos nulos


Passando null retorna null :
SELECT LENGTH(null);

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

Argumento ausente


Chamando LENGTH() sem passar um argumento resulta em um erro:
SELECT LENGTH();

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