In MySQL, ci sono molte volte in cui length() funzione e char_length() funzione fornirà esattamente gli stessi risultati. Tuttavia, ci sono anche momenti in cui i risultati saranno completamente diversi. Ecco perché.
Innanzitutto, ecco la definizione per ciascuna di queste funzioni:
char_length()- Restituisce la lunghezza di una stringa, misurata in caratteri.
length()- Restituisce la lunghezza di una stringa, misurata in byte.
Nota "caratteri" rispetto a "byte":uno viene misurato in caratteri , l'altro è misurato in byte .
In molti casi, il numero di byte sarà uguale al numero di caratteri nella stringa, ma non è sempre così. Il numero di byte utilizzati per carattere dipende da come vengono archiviati i dati. Ad esempio, se la stringa è archiviata come dati Unicode, ci saranno 2 byte per carattere.
Ecco un esempio di base che utilizza il testo ASCII (dove entrambe le funzioni restituiscono lo stesso risultato):
SELECT
CHAR_LENGTH('Lit'),
LENGTH('Lit');
Risultato:
+--------------------+---------------+
| CHAR_LENGTH('Lit') | LENGTH('Lit') |
+--------------------+---------------+
| 3 | 3 |
+--------------------+---------------+
E spesso otterremo lo stesso risultato se la stringa è archiviata in un database:
SELECT
CHAR_LENGTH(ArtistName),
LENGTH(ArtistName)
FROM Artists
WHERE ArtistName = 'Lit';
Risultato:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 3 | +-------------------------+--------------------+
Tuttavia, se cambiamo la colonna del database per memorizzare i dati come unicode:
ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) unicode;
E quindi esegui di nuovo la stessa query:
SELECT
CHAR_LENGTH(ArtistName),
LENGTH(ArtistName)
FROM Artists
WHERE ArtistName = 'Lit';
Otteniamo un risultato diverso:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 6 | +-------------------------+--------------------+
Questo perché unicode memorizza ogni carattere come 2 byte.
È simile alla differenza tra datalength() e len() in T-SQL.
MySQL ha anche octet_length() funzione, che è sinonimo di length() .