Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como a função OCTET_LENGTH() funciona no MySQL


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


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