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() .