Qual é a principal diferença entre length()
e char_length()
?
Eu acredito que tem algo a ver com cadeias binárias e não binárias. Existe alguma razão prática para armazenar seqüências de caracteres como binárias?
mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
Respostas:
LENGTH()
retorna o comprimento da string medida em bytes .CHAR_LENGTH()
retorna o comprimento da sequência medida em caracteres .Isso é especialmente relevante para Unicode, no qual a maioria dos caracteres é codificada em dois bytes. Ou UTF-8, onde o número de bytes varia. Por exemplo:
Como você pode ver, o símbolo do Euro ocupa 3 bytes (é codificado como
0xE282AC
em UTF-8), embora seja apenas um caractere.fonte
0313 combining comma above
. Como a = 61, 0x00610313 é exibido como a̓ e ocupa 4 bytes.varchar (10) armazenará 10 caracteres, que podem ter mais de 10 bytes. Nos índices, ele alocará o comprimento máximo do campo - portanto, se você estiver usando UTF8-mb4, ele alocará 40 bytes para o campo de 10 caracteres.
fonte