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.