Se lavori con SQL Server da molto tempo, potresti aver riscontrato il Datalength()
funzione. Questa funzione restituisce il numero di byte utilizzati per rappresentare un'espressione.
Ma se sei passato a MySQL, potresti essere alla ricerca di una funzione che faccia la stessa cosa.
In MySQL, il Length()
La funzione fa sostanzialmente la stessa cosa di T-SQL Datalength()
funzione fa in SQL Server (e Azure). Length()
di MySQL la funzione restituisce la lunghezza di una stringa, misurata in byte.
Esempi
Ecco alcuni esempi da dimostrare.
SQL Server
Ecco un esempio di base per SQL Server (usando T-SQL):
SELECT DATALENGTH('Cat') AS Datalength;
Risultato:
Datalength ---------- 3
MySQL
Ecco la query equivalente in MySQL:
SELECT LENGTH('Cat') AS Length;
Risultato:
+--------+ | Length | +--------+ | 3 | +--------+
Entrambi misurano i byte
Ma soprattutto, entrambe le funzioni misurano byte , non caratteri . Quindi, se i dati vengono archiviati come stringa Unicode, il numero di byte sarà il doppio del numero di caratteri. Questo perché le stringhe Unicode utilizzano 2 byte per carattere.
Di seguito è riportato un esempio di esecuzione essenzialmente della stessa query su una colonna Unicode in SQL Server, quindi in MySQL.
SQL Server
SELECT DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Risultato:
DataLength ---------- 6
MySQL
SELECT LENGTH(ArtistName) AS Length FROM Artists WHERE ArtistName = 'Lit';
Risultato:
+--------+ | Length | +--------+ | 6 | +--------+
È importante notare che il motivo per cui questi esempi restituiscono 6 è dovuto al tipo di dati utilizzato nel database. Entrambi gli esempi potrebbero anche restituire 3 se i dati non sono stati archiviati come Unicode.
Caratteri vs Byte
Nell'esempio di SQL Server, se avessimo usato Len()
funzione invece, avrebbe restituito 3. Questo perché Len()
restituisce il numero di caratteri, non i byte.
Allo stesso modo per MySQL, se avessimo usato Char_Length()
funzione, avrebbe anche restituito 3, perché Char_Length()
restituisce il numero di caratteri invece di byte.