Als u al geruime tijd met SQL Server werkt, bent u mogelijk de Datalength()
tegengekomen functie. Deze functie retourneert het aantal bytes dat wordt gebruikt om een uitdrukking weer te geven.
Maar als je bent overgestapt naar MySQL, ben je misschien op zoek naar een functie die hetzelfde doet.
In MySQL is de Length()
functie doet in principe hetzelfde als de T-SQL Datalength()
functie doet in SQL Server (en Azure). MySQL's Length()
functie retourneert de lengte van een string, gemeten in bytes.
Voorbeelden
Hier zijn enkele voorbeelden om te demonstreren.
SQL-server
Hier is een basisvoorbeeld voor SQL Server (met T-SQL):
SELECT DATALENGTH('Cat') AS Datalength;
Resultaat:
Datalength ---------- 3
MySQL
Hier is de equivalente zoekopdracht in MySQL:
SELECT LENGTH('Cat') AS Length;
Resultaat:
+--------+ | Length | +--------+ | 3 | +--------+
Beide bytes meten
Maar het belangrijkste is dat beide functies bytes meten , niet tekens . Dus als de gegevens worden opgeslagen als een Unicode-reeks, is het aantal bytes het dubbele van het aantal tekens. Dit komt omdat Unicode-strings 2 bytes per karakters gebruiken.
Hieronder ziet u een voorbeeld van het uitvoeren van in wezen dezelfde query op een Unicode-kolom in SQL Server en vervolgens in MySQL.
SQL-server
SELECT DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Resultaat:
DataLength ---------- 6
MySQL
SELECT LENGTH(ArtistName) AS Length FROM Artists WHERE ArtistName = 'Lit';
Resultaat:
+--------+ | Length | +--------+ | 6 | +--------+
Het is belangrijk op te merken dat de reden dat deze voorbeelden 6 retourneren, is vanwege het gegevenstype dat in de database wordt gebruikt. Beide voorbeelden kunnen ook 3 retourneren als de gegevens niet als Unicode zijn opgeslagen.
Tekens versus bytes
Als we in het SQL Server-voorbeeld de Len()
. hadden gebruikt functie in plaats daarvan zou het 3 hebben geretourneerd. Dit komt omdat Len()
geeft het aantal karakters terug – niet de bytes.
Hetzelfde geldt voor MySQL, als we de Char_Length()
. hadden gebruikt functie, zou het ook 3 hebben geretourneerd, omdat Char_Length()
geeft het aantal tekens terug in plaats van bytes.