Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL CHAR() срещу T-SQL CHAR():Каква е разликата?

Има много функции, които са включени както в 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 |+---------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO MySQL:Вмъкване на няколко реда в една заявка

  2. MySQL DATEDIFF() срещу TIMEDIFF():Каква е разликата?

  3. Алтернатива на mysql_real_escape_string без свързване към DB

  4. MySQL - Използване на COUNT(*) в клаузата WHERE

  5. Група по клауза в mySQL и postgreSQL, защо грешката в postgreSQL?