Er zijn veel functies die zijn opgenomen in zowel MySQL als SQL Server. Het feit dat beide DBMS's functies met dezelfde naam delen, betekent echter niet dat die functies op precies dezelfde manier werken.
Neem CHAR()
bijvoorbeeld. Zowel MySQL als SQL Server bevatten deze functie. Technisch gezien is het voor SQL Server eigenlijk een T-SQL-functie, maar daar gaat het niet om. Het punt is dat de MySQL CHAR()
functie biedt meer functionaliteit dan de T-SQL/SQL Server CHAR()
functie.
In het bijzonder accepteert de MySQL-versie meerdere gehele getallen, terwijl de T-SQL-versie slechts één geheel getal accepteert. De MySQL-versie accepteert ook een USING
clausule waarmee u kunt specificeren welke tekenset moet worden gebruikt (de T-SQL-versie heeft deze clausule niet).
Hieronder staan enkele voorbeelden van deze verschillen.
Meerdere gehele getallen
Dit is wat er gebeurt als we meerdere gehele getallen opgeven bij het gebruik van MySQL:
SELECT CHAR(67, 97, 116) AS 'MySQL Result';
Resultaat:
+--------------+ | MySQL Result | +--------------+ | Cat | +--------------+
Het interpreteert dus met succes elk geheel getal en geeft de resultaten terug.
Dit is wat er gebeurt als we hetzelfde doen met SQL Server:
SELECT CHAR(67, 97, 116) AS 'SQL Server Result';
Resultaat:
The char function requires 1 argument(s).
Om hetzelfde resultaat te bereiken als het MySQL-voorbeeld, moeten we meerdere CHAR()
samenvoegen functies. Zoiets als dit:
SELECT CHAR(67) + CHAR(97) + CHAR(116) AS 'Concatenated Result';
Resultaat:
+-----------------------+ | Concatenated Result | |-----------------------| | Cat | +-----------------------+
De USING
Clausule
De MySQL-versie van CHAR()
accepteert een USING
clausule, terwijl de T-SQL-versie dat niet doet. Hier is een voorbeeld waarbij ik het unicode-codepunt specificeer met MySQL:
SELECT CHAR(0x027FE USING ucs2) AS 'MySQL Result';
Resultaat:
+--------------+ | MySQL Result | +--------------+ | ⟾ | +--------------+
En dit is wat er gebeurt als ik overschakel naar SQL Server:
SELECT CHAR(0x027FE USING ucs2) AS 'SQL Server Result';
Resultaat:
Incorrect syntax near 'USING'.
Voorbeeld 3 – Meerdere resultaatbytes
In MySQL worden argumenten groter dan 255 automatisch omgezet in meerdere resultaatbytes. In SQL Server retourneren argumenten groter dan 255 NULL
.
Hier is een voorbeeld met MySQL:
SELECT HEX(CHAR(1799)) AS 'MySQL Result';
Resultaat:
+--------------+ | MySQL Result | +--------------+ | 0707 | +--------------+
En hier proberen we hetzelfde te doen in SQL Server:
SELECT CONVERT(VARCHAR(1000), CHAR(1799), 2) AS 'SQL Server Result';
Resultaat:
+---------------------+ | SQL Server Result | |---------------------| | NULL | +---------------------+