No MySQL, há muitas vezes em que o
length()
função e o char_length()
A função fornecerá exatamente os mesmos resultados. No entanto, também há momentos em que os resultados serão completamente diferentes. Aqui está o porquê. Primeiro, aqui está a definição para cada uma dessas funções:
char_length()
- Retorna o comprimento de uma string, medido em caracteres.
length()
- Retorna o comprimento de uma string, medido em bytes.
Observe “caracteres” versus “bytes” – um é medido em caracteres , o outro é medido em bytes .
Em muitos casos, o número de bytes será o mesmo que o número de caracteres na string, mas nem sempre é esse o caso. O número de bytes usados por caractere depende de como os dados são armazenados. Por exemplo, se a string for armazenada como dados Unicode, haverá 2 bytes por caractere.
Aqui está um exemplo básico usando texto ASCII (onde ambas as funções retornam o mesmo resultado):
SELECT CHAR_LENGTH('Lit'), LENGTH('Lit');
Resultado:
+--------------------+---------------+ | CHAR_LENGTH('Lit') | LENGTH('Lit') | +--------------------+---------------+ | 3 | 3 | +--------------------+---------------+
E muitas vezes obteremos o mesmo resultado se a string for armazenada em um banco de dados:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Resultado:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 3 | +-------------------------+--------------------+
No entanto, se alterarmos a coluna do banco de dados para armazenar os dados como unicode:
ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) unicode;
E, em seguida, execute a mesma consulta novamente:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Obtemos um resultado diferente:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 6 | +-------------------------+--------------------+
Isso ocorre porque o unicode armazena cada caractere como 2 bytes.
Isso é semelhante à diferença entre
datalength()
e len()
em T-SQL. MySQL também tem o
octet_length()
função, que é sinônimo de length()
.