Има много функции, които са включени както в MySQL, така и в SQL Server. Само защото и двете СУБД споделят функции с едно и също име, не означава, че тези функции работят по абсолютно същия начин.
Вземете CHAR()
например. И MySQL, и SQL Server включват тази функция. Добре, технически, за SQL Server това всъщност е T-SQL функция, но това не е важно. Въпросът е, че MySQL CHAR()
функцията предоставя повече функционалност от T-SQL/SQL сървъра CHAR()
функция.
По-специално, версията на MySQL приема множество цели числа, докато версията на T-SQL приема само едно цяло число. Версията на MySQL също приема USING
клауза, която ви позволява да укажете кой набор от знаци да използвате (версията на T-SQL няма тази клауза).
По-долу са дадени някои примери за тези разлики.
Множество цели числа
Ето какво се случва, ако предоставим множество цели числа, когато използваме MySQL:
ИЗБЕРЕТЕ CHAR(67, 97, 116) КАТО 'MySQL резултат';
Резултат:
+--------------+| Резултат от MySQL |+--------------+| Котка |+--------------+
Така той успешно интерпретира всяко цяло число и връща резултатите.
Ето какво се случва, ако направим същото с SQL Server:
ИЗБЕРЕТЕ CHAR(67, 97, 116) КАТО „Резултат от SQL сървъра“;
Резултат:
Функцията char изисква 1 аргумент(и).
За да постигнем същия резултат като примера с MySQL, ще трябва да обединим множество CHAR()
функции. Нещо като това:
ИЗБЕРЕТЕ CHAR(67) + CHAR(97) + CHAR(116) КАТО „Свързан резултат“;
Резултат:
<пред>+-----------------------+| Конкатениран резултат ||-----------------------|| Котка |+-----------------------+USING
Клауза
Версията на MySQL на CHAR()
приема USING
клауза, докато версията на T-SQL не. Ето пример, в който посочвам кодовата точка на unicode с помощта на MySQL:
ИЗБЕРЕТЕ CHAR(0x027FE ИЗПОЛЗВАЙТЕ ucs2) КАТО 'MySQL резултат';
Резултат:
+--------------+| Резултат от MySQL |+--------------+| ⟾ |+--------------+
И ето какво се случва, когато премина към SQL Server:
ИЗБЕРЕТЕ CHAR(0x027FE ИЗПОЛЗВАЙТЕ ucs2) КАТО „Резултат от SQL сървъра“;
Резултат:
Неправилен синтаксис близо до „USING“.
Пример 3 – Множество резултатни байта
В MySQL аргументите, по-големи от 255, автоматично се преобразуват в множество резултатни байта. В SQL Server аргументите, по-големи от 255, връщат NULL
.
Ето пример за използване на MySQL:
ИЗБЕРЕТЕ HEX(CHAR(1799)) КАТО 'MySQL резултат';
Резултат:
+--------------+| Резултат от MySQL |+--------------+| 0707 |+--------------+
И тук се опитваме да направим същото в SQL Server:
ИЗБЕРЕТЕ CONVERT(VARCHAR(1000), CHAR(1799), 2) КАТО „Резултат от SQL сървъра“;
Резултат:
+---------------------+| Резултат от SQL Server ||---------------------|| NULL |+---------------------+