Si vous travaillez avec SQL Server depuis un certain temps, vous avez peut-être rencontré le Datalength()
une fonction. Cette fonction renvoie le nombre d'octets utilisés pour représenter une expression.
Mais si vous êtes passé à MySQL, vous recherchez peut-être une fonction qui fait la même chose.
Dans MySQL, le Length()
La fonction fait fondamentalement la même chose que le T-SQL Datalength()
fonctionne dans SQL Server (et Azure). Length()
de MySQL renvoie la longueur d'une chaîne, mesurée en octets.
Exemples
Voici quelques exemples à démontrer.
SQL Server
Voici un exemple de base pour SQL Server (utilisant T-SQL) :
SELECT DATALENGTH('Cat') AS Datalength;
Résultat :
Datalength ---------- 3
MySQL
Voici la requête équivalente dans MySQL :
SELECT LENGTH('Cat') AS Length;
Résultat :
+--------+ | Length | +--------+ | 3 | +--------+
Les deux mesurent les octets
Mais le plus important, les deux fonctions mesurent octets , pas des caractères . Ainsi, si les données sont stockées sous forme de chaîne Unicode, le nombre d'octets sera le double du nombre de caractères. En effet, les chaînes Unicode utilisent 2 octets par caractère.
Vous trouverez ci-dessous un exemple d'exécution essentiellement de la même requête sur une colonne Unicode dans SQL Server, puis dans MySQL.
SQL Server
SELECT DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Résultat :
DataLength ---------- 6
MySQL
SELECT LENGTH(ArtistName) AS Length FROM Artists WHERE ArtistName = 'Lit';
Résultat :
+--------+ | Length | +--------+ | 6 | +--------+
Il est important de noter que la raison pour laquelle ces exemples renvoient 6 est due au type de données utilisé dans la base de données. Les deux exemples pourraient également renvoyer 3 si les données n'étaient pas stockées au format Unicode.
Caractères vs Octets
Dans l'exemple SQL Server, si nous avions utilisé le Len()
fonction à la place, il aurait renvoyé 3. C'est parce que Len()
renvoie le nombre de caractères - pas les octets.
De même pour MySQL, si nous avions utilisé le Char_Length()
fonction, elle aurait également renvoyé 3, car Char_Length()
renvoie le nombre de caractères au lieu d'octets.