Pokud jste se serverem SQL pracovali jakkoli dlouho, možná jste narazili na Datalength()
funkce. Tato funkce vrací počet bajtů použitých k reprezentaci výrazu.
Ale pokud jste přešli na MySQL, možná hledáte funkci, která dělá totéž.
V MySQL je to Length()
Funkce dělá v podstatě totéž, co T-SQL Datalength()
funkce funguje na serveru SQL Server (a Azure). Length()
MySQL funkce vrací délku řetězce měřenou v bajtech.
Příklady
Zde je několik příkladů k demonstraci.
SQL Server
Zde je základní příklad pro SQL Server (pomocí T-SQL):
SELECT DATALENGTH('Cat') AS Datalength;
Výsledek:
Datalength ---------- 3
MySQL
Zde je ekvivalentní dotaz v MySQL:
SELECT LENGTH('Cat') AS Length;
Výsledek:
+--------+ | Length | +--------+ | 3 | +--------+
Oba bajty měření
Ale co je nejdůležitější, obě funkce měří bajty , nikoli znaky . Pokud jsou tedy data uložena jako řetězec Unicode, počet bajtů bude dvojnásobkem počtu znaků. Důvodem je, že řetězce Unicode používají 2 bajty na znaky.
Níže je uveden příklad spuštění v podstatě stejného dotazu proti sloupci Unicode v SQL Server a poté v MySQL.
SQL Server
SELECT DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Výsledek:
DataLength ---------- 6
MySQL
SELECT LENGTH(ArtistName) AS Length FROM Artists WHERE ArtistName = 'Lit';
Výsledek:
+--------+ | Length | +--------+ | 6 | +--------+
Je důležité si uvědomit, že důvodem, proč tyto příklady vrací 6, je datový typ použitý v databázi. Oba příklady by také mohly vrátit 3, pokud data nebyla uložena jako Unicode.
Znaky vs. bajty
V příkladu SQL Server, pokud bychom použili Len()
místo toho by vrátila 3. Důvodem je Len()
vrátí počet znaků – nikoli bajtů.
Podobně pro MySQL, pokud bychom použili Char_Length()
funkce, také by vrátila 3, protože Char_Length()
vrátí počet znaků místo bajtů.