sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es el equivalente de DATALENGTH() en MySQL?

Si ha estado trabajando con SQL Server durante algún tiempo, es posible que haya encontrado el Datalength() función. Esta función devuelve el número de bytes utilizados para representar una expresión.

Pero si se cambió a MySQL, es posible que esté buscando una función que haga lo mismo.

En MySQL, el Length() hace básicamente lo mismo que T-SQL Datalength() función hace en SQL Server (y Azure). Length() de MySQL La función devuelve la longitud de una cadena, medida en bytes.

Ejemplos

Aquí hay algunos ejemplos para demostrar.

Servidor SQL

Aquí hay un ejemplo básico para SQL Server (usando T-SQL):

SELECT DATALENGTH('Cat') AS Datalength;

Resultado:

Datalength
----------
3         

MySQL

Aquí está la consulta equivalente en MySQL:

SELECT LENGTH('Cat') AS Length;

Resultado:

+--------+
| Length |
+--------+
|      3 |
+--------+

Ambos bytes de medida

Pero lo más importante, ambas funciones miden bytes , no caracteres . Entonces, si los datos se almacenan como una cadena Unicode, la cantidad de bytes será el doble de la cantidad de caracteres. Esto se debe a que las cadenas Unicode usan 2 bytes por carácter.

A continuación se muestra un ejemplo de cómo ejecutar esencialmente la misma consulta en una columna Unicode en SQL Server y luego en MySQL.

Servidor SQL

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 |
+--------+

Es importante tener en cuenta que la razón por la que estos ejemplos devuelven 6 se debe al tipo de datos utilizado en la base de datos. Ambos ejemplos también podrían devolver 3 si los datos no se almacenaron como Unicode.

Caracteres vs Bytes

En el ejemplo de SQL Server, si hubiéramos usado Len() en su lugar, habría devuelto 3. Esto se debe a que Len() devuelve el número de caracteres, no los bytes.

De manera similar para MySQL, si hubiéramos usado Char_Length() función, también habría devuelto 3, porque Char_Length() devuelve el número de caracteres en lugar de bytes.