No MySQL, o
OCTET_LENGTH()
A função retorna o comprimento de uma string, medida em bytes. Esta função é na verdade um sinônimo de
LENGTH()
. Sintaxe
A sintaxe básica é assim:
OCTET_LENGTH(str)
Onde
str
é a string para a qual você deseja que o comprimento seja retornado. Exemplo
SELECT OCTET_LENGTH('Cat');
Resultado:
+---------------------+ | OCTET_LENGTH('Cat') | +---------------------+ | 3 | +---------------------+
Este é o mesmo resultado que obteríamos se usássemos o
CHAR_LENGTH()
função. No entanto, o OCTET_LENGTH()
função pode retornar resultados diferentes, dependendo do tipo de dados.Tipos de dados
Quando você consulta um banco de dados, o
OCTET_LENGTH()
função pode retornar um resultado diferente, dependendo do tipo de dados. As strings Unicode retornam o dobro do número de bytes. As strings UTF-8 podem variar. Aqui está um exemplo de uso de UTF-8:
SELECT CHAR_LENGTH(_utf8 '€'), OCTET_LENGTH(_utf8 '€');
Resultados:
+--------------------------+---------------------------+ | CHAR_LENGTH(_utf8 '€') | OCTET_LENGTH(_utf8 '€') | +--------------------------+---------------------------+ | 1 | 3 | +--------------------------+---------------------------+
Nesse caso, o comprimento do caractere é 1, mas o comprimento do octeto é 3 bytes.
No exemplo a seguir, consultamos um banco de dados. Nesse caso, o
ArtistName
coluna usa varchar(255) tipo de dados:SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Então o resultado fica assim:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 3 | +--------------------------+
No entanto, se alterarmos a coluna para
ucs2
, cada caractere será representado por um código Unicode de 2 bytes e, portanto, o resultado será diferente. Para demonstrar, podemos alterar a tabela assim:
SELECT OCTET_LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Agora, se consultarmos novamente:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Resultado:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 6 | +--------------------------+
Brancos à direita
O
OCTET_LENGTH()
função conta os espaços em branco à direita (como espaços no final da string). Então, se adicionarmos um espaço ao final do primeiro exemplo, obteremos o seguinte resultado:SELECT LENGTH('Cat ');
Resultado:
+----------------+ | LENGTH('Cat ') | +----------------+ | 4 | +----------------+
Espaços em branco
Obtemos o mesmo resultado com espaços em branco à esquerda (por exemplo, espaços no início da string):
SELECT LENGTH(' Cat');
Resultado:
+----------------+ | LENGTH(' Cat') | +----------------+ | 4 | +----------------+
A menos, claro, que usemos uma função como
TRIM()
, RTRIM()
, ou LTRIM()
para cortar o espaço em branco. Exemplo:
SELECT LENGTH(RTRIM('Cat '));
Resultado:
+-----------------------+ | LENGTH(RTRIM('Cat ')) | +-----------------------+ | 3 | +-----------------------+
Mais exemplos
Aqui estão alguns exemplos de várias strings:
SELECT OCTET_LENGTH('Quiet Riot') AS 'Result 1', OCTET_LENGTH('') AS 'Result 2', OCTET_LENGTH('1234 7') AS 'Result 3', OCTET_LENGTH(' ') AS 'Result 4', OCTET_LENGTH(TRIM(' ')) AS 'Result 5';
Resultado:
+----------+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | Result 5 | +----------+----------+----------+----------+----------+ | 10 | 0 | 7 | 3 | 0 | +----------+----------+----------+----------+----------+
Observe que os resultados 4 e 5 são diferentes porque usei o
TRIM()
função para cortar o espaço em branco do resultado 5. Visto que a string consiste apenas em espaços em branco, o comprimento da string cortada é 0
. Transact-SQL (para SQL Server, Azure) tem uma função semelhante ao
LENGTH()
do MySQL e OCTET_LENGTH()
funções, mas em T-SQL é chamado de DATALENGTH()
.