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

Qual é o equivalente a DATALENGTH() no MySQL?


Se você trabalha com o SQL Server há algum tempo, pode ter encontrado o Datalength() função. Esta função retorna o número de bytes usados ​​para representar uma expressão.

Mas se você mudou para o MySQL, pode estar procurando uma função que faça a mesma coisa.

No MySQL, o Length() função faz basicamente a mesma coisa que o T-SQL Datalength() função faz no SQL Server (e Azure). Length() do MySQL função retorna o comprimento de uma string, medida em bytes.

Exemplos


Aqui estão alguns exemplos para demonstrar.

SQL Server


Aqui está um exemplo básico para SQL Server (usando T-SQL):
SELECT DATALENGTH('Cat') AS Datalength;

Resultado:
Datalength
----------
3         

MySQL


Aqui está a consulta equivalente no MySQL:
SELECT LENGTH('Cat') AS Length;

Resultado:
+--------+
| Length |
+--------+
|      3 |
+--------+

Ambos medem bytes


Mas o mais importante, ambas as funções medem bytes , não personagens . Portanto, se os dados forem armazenados como uma string Unicode, o número de bytes será o dobro do número de caracteres. Isso ocorre porque as strings Unicode usam 2 bytes por caracteres.

Abaixo está um exemplo de execução essencialmente a mesma consulta em uma coluna Unicode no SQL Server e, em seguida, no MySQL.

SQL Server

SELECT DATALENGTH(ArtistName) AS DataLength
FROM Artists 
WHERE ArtistName = 'Lit';

Resultado:
DataLength
----------
6         

MySQL

SELECT LENGTH(ArtistName) AS Length
FROM Artists
WHERE ArtistName = 'Lit';

Resultado:
+--------+
| Length |
+--------+
|      6 |
+--------+

É importante observar que o motivo pelo qual esses exemplos retornam 6 é por causa do tipo de dados usado no banco de dados. Ambos os exemplos também podem retornar 3 se os dados não forem armazenados como Unicode.

Caracteres vs Bytes


No exemplo do SQL Server, se tivéssemos usado o Len() em vez disso, teria retornado 3. Isso ocorre porque Len() retorna o número de caracteres – não os bytes.

Da mesma forma para o MySQL, se tivéssemos usado o Char_Length() função, também teria retornado 3, porque Char_Length() retorna o número de caracteres em vez de bytes.