sql >> Database teknologi >  >> RDS >> Mysql

MySQL CHAR() vs T-SQL CHAR():Hvad er forskellen?

Der er mange funktioner, der er inkluderet i både MySQL og SQL Server. Men bare fordi begge DBMS'er deler funktioner af samme navn, betyder det ikke, at disse funktioner fungerer nøjagtigt på samme måde.

Tag CHAR() for eksempel. Både MySQL og SQL Server inkluderer denne funktion. Godt teknisk set, for SQL Server er det faktisk en T-SQL-funktion, men det er ved siden af. Pointen er, at MySQL CHAR() funktion giver mere funktionalitet end T-SQL/SQL-serveren CHAR() funktion.

Især MySQL-versionen accepterer flere heltal, hvorimod T-SQL-versionen kun accepterer et enkelt heltal. MySQL-versionen accepterer også en USING klausul, der giver dig mulighed for at angive, hvilket tegnsæt der skal bruges (T-SQL-versionen har ikke denne klausul).

Nedenfor er nogle eksempler på disse forskelle.

Flere heltal

Her er, hvad der sker, hvis vi leverer flere heltal, når vi bruger MySQL:

SELECT CHAR(67, 97, 116) AS 'MySQL Result';

Resultat:

+--------------+
| MySQL Result |
+--------------+
| Cat          |
+--------------+

Så det fortolker hvert heltal og returnerer resultaterne.

Her er, hvad der sker, hvis vi gør det samme ved hjælp af SQL Server:

SELECT CHAR(67, 97, 116) AS 'SQL Server Result';

Resultat:

The char function requires 1 argument(s).

For at opnå det samme resultat som MySQL-eksemplet, skal vi sammenkæde flere CHAR() funktioner. Noget som dette:

SELECT CHAR(67) + CHAR(97) + CHAR(116) AS 'Concatenated Result';

Resultat:

+-----------------------+
| Concatenated Result   |
|-----------------------|
| Cat                   |
+-----------------------+

Koden USING Klausul

MySQL-versionen af ​​CHAR() accepterer en USING klausul, hvorimod T-SQL-versionen ikke gør. Her er et eksempel, hvor jeg angiver unicode-kodepunktet ved hjælp af MySQL:

SELECT CHAR(0x027FE USING ucs2) AS 'MySQL Result';

Resultat:

+--------------+
| MySQL Result |
+--------------+
| ⟾            |
+--------------+

Og her er, hvad der sker, når jeg skifter til SQL Server:

SELECT CHAR(0x027FE USING ucs2) AS 'SQL Server Result';

Resultat:

Incorrect syntax near 'USING'.

Eksempel 3 – Flere resultatbytes

I MySQL konverteres argumenter større end 255 automatisk til flere resultatbytes. I SQL Server returnerer argumenter større end 255 NULL .

Her er et eksempel, der bruger MySQL:

SELECT HEX(CHAR(1799)) AS 'MySQL Result';

Resultat:

+--------------+
| MySQL Result |
+--------------+
| 0707         |
+--------------+

Og her prøver vi at gøre det samme i SQL Server:

SELECT CONVERT(VARCHAR(1000), CHAR(1799), 2) AS 'SQL Server Result';

Resultat:

+---------------------+
| SQL Server Result   |
|---------------------|
| NULL                |
+---------------------+

  1. Dimensioner af dimensioner:Et kig på Data Warehousings mest almindelige dimensionelle tabeltyper

  2. MONTHS_BETWEEN() Funktion i Oracle

  3. Myten om, at DROP og TRUNCATE TABLE er ikke-loggede

  4. Tjek om der findes en tabel i SQL Server