Infocurci - programmatore Php Roma
Infocurci - programmatore Php Roma
"faster than 98% of all tested websites" (tools.pingdom.com) - 100/100 Google PageSpeed Insights - Benvenuti :)

Mysql : Che differenza c'è tra LENGTH e CHAR_LENGTH?

Mysql offre due funzioni per la verifica della lunghezza delle stringhe. Attenzione all'utilizzo in contesti unicode perchè la differenza di comportamento è notevole.
In questo articolo vediamo due esempi pratici per evitare dei risultati inattesi.

Mysql

Mysql offre due funzioni per verificare la lunghezza di una stringa:

  • LENGTH
  • CHAR_LENGTH

 

queste due funzioni si differenziano perchè la prima restituisce il numero di bytes che compongono una stringa, mentre char_length ne restituisce la lunghezza.

La differenza è intangibile finchè si lavora su stringhe ascii:

select length("ciao mondo");
select char_length("ciao mondo");

visto che 1 carattere = 1 byte, lunghezza e "peso" della stringa coincidono.

Il discorso cambia se lavoriamo su stringhe multybyte:

select length("Emilio Butragueño");
select char_length("Emilio Butragueño");

la "ñ" , con la tilde tanto carica agli spagnoli, occupa 2 byte e quindi length() restituisce 18 byte, char_length 17 caratteri.

Su stringhe completamente multi-byte poi i risultati sono completamente diversi:

select length("こんにちは世界");
select char_length("こんにちは世界");

il "ciao mondo" in giapponese restituisce 7 caratteri ma 21 byte.

Attenzione quindi ad utilizzare questa funzione sopratutto in casi in cui la colonna può contenere valori eterogenei. Classico esempio quello di un campo "nome" che, finchè utilizza valori italiani, funziona allo stesso modo .. ma il giorno in cui si iscrive un utente cinese eventuali controlli su routine e stored procedure possono dare spiacevoli sorprese.