Existuje mnoho funkcí, které jsou zahrnuty v MySQL i SQL Serveru. To, že oba DBMS sdílejí funkce stejného jména, však neznamená, že tyto funkce fungují úplně stejně.
Vezměte CHAR()
například. MySQL i SQL Server tuto funkci obsahují. Technicky vzato, pro SQL Server je to vlastně funkce T-SQL, ale to je vedle. Jde o to, že MySQL CHAR()
poskytuje více funkcí než T-SQL/SQL Server CHAR()
funkce.
Konkrétně verze MySQL přijímá více celých čísel, zatímco verze T-SQL přijímá pouze jedno celé číslo. Verze MySQL také přijímá USING
klauzule, která vám umožňuje určit, kterou znakovou sadu použít (verze T-SQL tuto klauzuli nemá).
Níže jsou uvedeny některé příklady těchto rozdílů.
Více celých čísel
Co se stane, když při používání MySQL zadáme více celých čísel:
SELECT CHAR(67, 97, 116) AS 'MySQL Result';
Výsledek:
+--------------+ | MySQL Result | +--------------+ | Cat | +--------------+
Úspěšně tedy interpretuje každé celé číslo a vrací výsledky.
Zde je to, co se stane, když uděláme totéž pomocí SQL Server:
SELECT CHAR(67, 97, 116) AS 'SQL Server Result';
Výsledek:
The char function requires 1 argument(s).
Abychom dosáhli stejného výsledku jako v příkladu MySQL, museli bychom zřetězit více CHAR()
funkcí. Něco jako toto:
SELECT CHAR(67) + CHAR(97) + CHAR(116) AS 'Concatenated Result';
Výsledek:
+-----------------------+ | Concatenated Result | |-----------------------| | Cat | +-----------------------+
Položka USING
Ustanovení
MySQL verze CHAR()
přijímá USING
klauzule, zatímco verze T-SQL nikoli. Zde je příklad, kde určuji bod kódu unicode pomocí MySQL:
SELECT CHAR(0x027FE USING ucs2) AS 'MySQL Result';
Výsledek:
+--------------+ | MySQL Result | +--------------+ | ⟾ | +--------------+
A co se stane, když přepnu na SQL Server:
SELECT CHAR(0x027FE USING ucs2) AS 'SQL Server Result';
Výsledek:
Incorrect syntax near 'USING'.
Příklad 3 – Více bajtů výsledku
V MySQL jsou argumenty větší než 255 automaticky převedeny na více výsledných bajtů. V SQL Server argumenty větší než 255 vrátí NULL
.
Zde je příklad použití MySQL:
SELECT HEX(CHAR(1799)) AS 'MySQL Result';
Výsledek:
+--------------+ | MySQL Result | +--------------+ | 0707 | +--------------+
A zde se snažíme udělat totéž v SQL Server:
SELECT CONVERT(VARCHAR(1000), CHAR(1799), 2) AS 'SQL Server Result';
Výsledek:
+---------------------+ | SQL Server Result | |---------------------| | NULL | +---------------------+