Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL CHAR() vs. T-SQL CHAR():Was ist der Unterschied?

Es gibt viele Funktionen, die sowohl in MySQL als auch in SQL Server enthalten sind. Nur weil beide DBMS Funktionen mit dem gleichen Namen teilen, heißt das nicht, dass diese Funktionen genau gleich funktionieren.

Nehmen Sie CHAR() zum Beispiel. Sowohl MySQL als auch SQL Server beinhalten diese Funktion. Technisch gesehen ist es für SQL Server eigentlich eine T-SQL-Funktion, aber das ist nebensächlich. Der Punkt ist, dass MySQL CHAR() -Funktion bietet mehr Funktionalität als der T-SQL/SQL-Server CHAR() Funktion.

Insbesondere akzeptiert die MySQL-Version mehrere ganze Zahlen, während die T-SQL-Version nur eine einzige ganze Zahl akzeptiert. Die MySQL-Version akzeptiert auch ein USING Klausel, mit der Sie angeben können, welcher Zeichensatz verwendet werden soll (die T-SQL-Version hat diese Klausel nicht).

Nachfolgend finden Sie einige Beispiele für diese Unterschiede.

Mehrere ganze Zahlen

Folgendes passiert, wenn wir bei der Verwendung von MySQL mehrere Ganzzahlen angeben:

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

Ergebnis:

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

So interpretiert es erfolgreich jede Ganzzahl und gibt die Ergebnisse zurück.

Folgendes passiert, wenn wir dasselbe mit SQL Server tun:

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

Ergebnis:

The char function requires 1 argument(s).

Um dasselbe Ergebnis wie im MySQL-Beispiel zu erzielen, müssten wir mehrere CHAR() verketten Funktionen. Etwa so:

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

Ergebnis:

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

Der USING Klausel

Die MySQL-Version von CHAR() akzeptiert ein USING -Klausel, während dies bei der T-SQL-Version nicht der Fall ist. Hier ist ein Beispiel, in dem ich den Unicode-Codepunkt mit MySQL festlege:

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

Ergebnis:

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

Und Folgendes passiert, wenn ich zu SQL Server wechsle:

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

Ergebnis:

Incorrect syntax near 'USING'.

Beispiel 3 – Mehrere Ergebnisbytes

In MySQL werden Argumente größer als 255 automatisch in mehrere Ergebnisbytes umgewandelt. In SQL Server geben Argumente größer als 255 NULL zurück .

Hier ist ein Beispiel mit MySQL:

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

Ergebnis:

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

Und hier versuchen wir dasselbe in SQL Server:

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

Ergebnis:

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