MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona LENGTH() in MariaDB

In MariaDB, LENGTH() è una funzione stringa incorporata che restituisce la lunghezza dell'argomento stringa specificato.

In modalità predefinita, la lunghezza della stringa viene misurata in byte. Ma quando è in modalità Oracle, si misura in caratteri.

Sintassi

La sintassi è questa:

LENGTH(str)

Dove str è la stringa per la quale verrà restituita la lunghezza.

Esempio

Ecco un esempio di base:

SELECT LENGTH('café');

Risultato:

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

In questo caso, la stringa era lunga quattro caratteri, ma LENGTH() restituito 5 .

Questo perché l'ultimo carattere utilizza due byte e sto usando la modalità SQL predefinita (il mio sql_mode=DEFAULT ). In modalità SQL predefinita, LENGTH() restituisce il numero di byte.

Modalità Oracle

Il passaggio alla modalità Oracle genera LENGTH() restituendo solo il numero di caratteri nella stringa (anziché il numero di byte).

Passiamo alla nostra sessione in modalità Oracle:

SET SESSION sql_mode='ORACLE';

E ora eseguiamo il precedente LENGTH() esempio ancora:

SELECT LENGTH('café');

Risultato:

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

Questa volta restituisce il numero di caratteri (4) invece del numero di byte (5).

In modalità Oracle, LENGTH() restituisce lo stesso risultato di CHAR_LENGTH() e il suo sinonimo, CHARACTER_LENGTH() .

Confronto con CHAR_LENGTH() e BIT_LENGTH()

Torniamo alla modalità predefinita:

SET SESSION sql_mode=DEFAULT;

Ecco un rapido confronto tra LENGTH() in modalità predefinita, CHAR_LENGTH() e BIT_LENGTH() che restituisce il numero di bit in una stringa:

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

Risultato:

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

Questo carattere tailandese ( ) utilizza 3 byte, e quindi LENGTH() restituisce 3 .

CHAR_LENGTH() restituisce 1 , perché è ancora solo un singolo carattere e BIT_LENGTH() restituisce il numero di bit (24 ).

Ancora una volta, se fossimo stati in modalità Oracle, LENGTH() avrebbe restituito lo stesso di CHAR_LENGTH() .

Non stringhe

Se l'argomento non è una stringa, viene convertito in una stringa.

Ecco un altro esempio che utilizza un numero:

SELECT LENGTH(1234);

Risultato:

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

Argomenti nulli

Passaggio null restituisce null :

SELECT LENGTH(null);

Risultato:

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

Argomento mancante

Chiamando LENGTH() senza passare un argomento si ottiene un errore:

SELECT LENGTH();

Risultato:

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