Ако сте работили със SQL Server от определен период от време, може да сте срещнали Datalength()
функция. Тази функция връща броя на байтовете, използвани за представяне на израз.
Но ако сте се преместили в MySQL, може да търсите функция, която прави същото.
В MySQL, Length()
функцията прави основно същото нещо, което T-SQL Datalength()
функцията прави в SQL Server (и Azure). Length()
на MySQL функцията връща дължината на низ, измерена в байтове.
Примери
Ето няколко примера за демонстрация.
SQL сървър
Ето основен пример за SQL Server (с помощта на T-SQL):
ИЗБЕРЕТЕ DATALENGTH('Cat') КАТО дължина на данните;
Резултат:
Дължина на данните----------3
MySQL
Ето еквивалентната заявка в MySQL:
SELECT LENGTH('Cat') КАТО дължина;
Резултат:
<пред>+--------+| Дължина |+--------+| 3 |+-------+И двата измервателни байта
Но най-важното е, че и двете функции измерват байтове , а не знаци . Така че, ако данните се съхраняват като Unicode низ, броят на байтовете ще бъде удвоен от броя на знаците. Това е така, защото Unicode низовете използват 2 байта на символ.
По-долу е даден пример за изпълнение на по същество същата заявка срещу колона Unicode в SQL Server, след това в MySQL.
SQL сървър
ИЗБЕРЕТЕ DATALENGTH(ArtistName) КАТО DataLengthFROM Artists WHERE ArtistName ='Lit';
Резултат:
Дължина на данните----------6
MySQL
ИЗБЕРЕТЕ ДЪЛЖИНА(Име на изпълнител) КАТО ДължинаFROM ArtistsWHERE ArtistName ='Lit';
Резултат:
<пред>+--------+| Дължина |+--------+| 6 |+-------+Важно е да се отбележи, че причината тези примери да връщат 6 е поради типа данни, използвани в базата данни. И двата примера могат също да върнат 3, ако данните не са съхранени като Unicode.
Символи срещу байтове
В примера на SQL Server, ако използвахме Len()
функция вместо това би върнала 3. Това е така, защото Len()
връща броя на знаците, а не байтовете.
По същия начин за MySQL, ако използвахме Char_Length()
функция, тя също би върнала 3, защото Char_Length()
връща броя знаци вместо байтове.