sql >> Databasteknik >  >> RDS >> Mysql

MySQL CHAR() vs T-SQL CHAR():Vad är skillnaden?

Det finns många funktioner som ingår i både MySQL och SQL Server. Men bara för att båda DBMS delar funktioner med samma namn, betyder det inte att dessa funktioner fungerar exakt på samma sätt.

Ta CHAR() till exempel. Både MySQL och SQL Server inkluderar denna funktion. Tja tekniskt sett är det för SQL Server faktiskt en T-SQL-funktion, men det är bortom saken. Poängen är att MySQL CHAR() funktion ger mer funktionalitet än T-SQL/SQL-servern CHAR() funktion.

I synnerhet accepterar MySQL-versionen flera heltal, medan T-SQL-versionen bara accepterar ett enda heltal. MySQL-versionen accepterar också en USING sats som låter dig specificera vilken teckenuppsättning som ska användas (T-SQL-versionen har inte denna sats).

Nedan finns några exempel på dessa skillnader.

Flera heltal

Här är vad som händer om vi tillhandahåller flera heltal när vi använder MySQL:

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

Resultat:

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

Så det tolkar framgångsrikt varje heltal och returnerar resultaten.

Så här händer om vi gör samma sak med SQL Server:

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

Resultat:

The char function requires 1 argument(s).

För att uppnå samma resultat som MySQL-exemplet skulle vi behöva sammanfoga flera CHAR() funktioner. Något så här:

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

Resultat:

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

USING Klausul

MySQL-versionen av CHAR() accepterar en USING klausul, medan T-SQL-versionen inte gör det. Här är ett exempel där jag anger unicode-kodpunkten med MySQL:

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

Resultat:

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

Och här är vad som händer när jag byter till SQL Server:

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

Resultat:

Incorrect syntax near 'USING'.

Exempel 3 – Flera resultatbyte

I MySQL omvandlas argument större än 255 automatiskt till flera resultatbyte. I SQL Server returnerar argument större än 255 NULL .

Här är ett exempel med MySQL:

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

Resultat:

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

Och här försöker vi göra samma sak i SQL Server:

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

Resultat:

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

  1. Korstabellbegränsningar i PostgreSQL

  2. mysqldump bästa praxis:Del 1 – MySQL-förutsättningar

  3. Introduktion till Multi-Statement Table-Valued Functions (MSTVF) i SQL Server

  4. Använder row_to_json() med kapslade kopplingar