Jeśli pracujesz z SQL Server przez dłuższy czas, być może napotkałeś Datalength()
funkcjonować. Ta funkcja zwraca liczbę bajtów użytych do reprezentowania wyrażenia.
Ale jeśli przeszedłeś na MySQL, być może szukasz funkcji, która robi to samo.
W MySQL funkcja Length()
funkcja robi w zasadzie to samo, co T-SQL Datalength()
funkcja działa w SQL Server (i Azure). Length()
w MySQL funkcja zwraca długość ciągu mierzoną w bajtach.
Przykłady
Oto kilka przykładów do zademonstrowania.
Serwer SQL
Oto podstawowy przykład SQL Server (przy użyciu T-SQL):
SELECT DATALENGTH('Cat') AS Datalength;
Wynik:
Datalength ---------- 3
MySQL
Oto równoważne zapytanie w MySQL:
SELECT LENGTH('Cat') AS Length;
Wynik:
+--------+ | Length | +--------+ | 3 | +--------+
Oba bajty pomiaru
Ale co najważniejsze, obie funkcje mierzą bajty , a nie znaki . Jeśli więc dane są przechowywane jako ciąg Unicode, liczba bajtów będzie podwojona do liczby znaków. Dzieje się tak, ponieważ ciągi Unicode używają 2 bajtów na znak.
Poniżej znajduje się przykład uruchomienia zasadniczo tego samego zapytania względem kolumny Unicode w SQL Server, a następnie w MySQL.
Serwer SQL
SELECT DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Wynik:
DataLength ---------- 6
MySQL
SELECT LENGTH(ArtistName) AS Length FROM Artists WHERE ArtistName = 'Lit';
Wynik:
+--------+ | Length | +--------+ | 6 | +--------+
Należy zauważyć, że powodem, dla którego te przykłady zwracają 6, jest typ danych używany w bazie danych. Oba przykłady mogą również zwrócić 3, jeśli dane nie były przechowywane jako Unicode.
Znaki a bajty
W przykładzie SQL Server, gdybyśmy użyli Len()
zamiast tego zwróciłby 3. Dzieje się tak, ponieważ Len()
zwraca liczbę znaków – nie bajtów.
Podobnie dla MySQL, gdybyśmy użyli Char_Length()
funkcja, to również zwróciłoby 3, ponieważ Char_Length()
zwraca liczbę znaków zamiast bajtów.