Istnieje wiele funkcji zawartych zarówno w MySQL, jak i SQL Server. Jednak to, że oba SZBD współdzielą funkcje o tej samej nazwie, nie oznacza, że te funkcje działają dokładnie w ten sam sposób.
Weź CHAR()
na przykład. Zarówno MySQL, jak i SQL Server zawierają tę funkcję. Technicznie rzecz biorąc, dla SQL Server jest to w rzeczywistości funkcja T-SQL, ale to nie ma znaczenia. Chodzi o to, że MySQL CHAR()
funkcja zapewnia większą funkcjonalność niż T-SQL/SQL Server CHAR()
funkcja.
W szczególności wersja MySQL akceptuje wiele liczb całkowitych, podczas gdy wersja T-SQL akceptuje tylko jedną liczbę całkowitą. Wersja MySQL akceptuje również USING
klauzula, która pozwala określić, którego zestawu znaków użyć (wersja T-SQL nie ma tej klauzuli).
Poniżej znajduje się kilka przykładów tych różnic.
Wiele liczb całkowitych
Oto, co się stanie, jeśli dostarczymy wiele liczb całkowitych podczas korzystania z MySQL:
SELECT CHAR(67, 97, 116) AS 'MySQL Result';
Wynik:
+--------------+ | MySQL Result | +--------------+ | Cat | +--------------+
Dzięki temu pomyślnie interpretuje każdą liczbę całkowitą i zwraca wyniki.
Oto, co się stanie, jeśli zrobimy to samo za pomocą SQL Server:
SELECT CHAR(67, 97, 116) AS 'SQL Server Result';
Wynik:
The char function requires 1 argument(s).
Aby osiągnąć ten sam wynik, co w przykładzie MySQL, musielibyśmy połączyć wiele CHAR()
Funkcje. Coś takiego:
SELECT CHAR(67) + CHAR(97) + CHAR(116) AS 'Concatenated Result';
Wynik:
+-----------------------+ | Concatenated Result | |-----------------------| | Cat | +-----------------------+
USING
Klauzula
Wersja MySQL funkcji CHAR()
akceptuje USING
klauzula, podczas gdy wersja T-SQL nie. Oto przykład, w którym określam punkt kodowy Unicode za pomocą MySQL:
SELECT CHAR(0x027FE USING ucs2) AS 'MySQL Result';
Wynik:
+--------------+ | MySQL Result | +--------------+ | ⟾ | +--------------+
A oto, co się stanie, gdy przejdę na SQL Server:
SELECT CHAR(0x027FE USING ucs2) AS 'SQL Server Result';
Wynik:
Incorrect syntax near 'USING'.
Przykład 3 – Wiele bajtów wyników
W MySQL argumenty większe niż 255 są automatycznie konwertowane na wiele bajtów wyników. W SQL Server argumenty większe niż 255 zwracają NULL
.
Oto przykład użycia MySQL:
SELECT HEX(CHAR(1799)) AS 'MySQL Result';
Wynik:
+--------------+ | MySQL Result | +--------------+ | 0707 | +--------------+
I tutaj próbujemy zrobić to samo w SQL Server:
SELECT CONVERT(VARCHAR(1000), CHAR(1799), 2) AS 'SQL Server Result';
Wynik:
+---------------------+ | SQL Server Result | |---------------------| | NULL | +---------------------+