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

MySQL CHAR() vs T-SQL CHAR():qual è la differenza?

Ci sono molte funzioni incluse sia in MySQL che in SQL Server. Tuttavia, solo perché entrambi i DBMS condividono funzioni con lo stesso nome, non significa che tali funzioni funzionino esattamente allo stesso modo.

Prendi CHAR() Per esempio. Sia MySQL che SQL Server includono questa funzione. Bene tecnicamente, per SQL Server è in realtà una funzione T-SQL, ma non è questo il punto. Il punto è che MySQL CHAR() La funzione fornisce più funzionalità rispetto a T-SQL/SQL Server CHAR() funzione.

In particolare, la versione MySQL accetta più interi, mentre la versione T-SQL accetta solo un singolo intero. La versione MySQL accetta anche un USING clausola che consente di specificare quale set di caratteri utilizzare (la versione T-SQL non ha questa clausola).

Di seguito sono riportati alcuni esempi di queste differenze.

Più numeri interi

Ecco cosa succede se forniamo più numeri interi quando utilizziamo MySQL:

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

Risultato:

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

Quindi interpreta correttamente ogni numero intero e restituisce i risultati.

Ecco cosa succede se facciamo la stessa cosa usando SQL Server:

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

Risultato:

The char function requires 1 argument(s).

Per ottenere lo stesso risultato dell'esempio MySQL, dovremmo concatenare più CHAR() funzioni. Qualcosa del genere:

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

Risultato:

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

Il USING Clausola

La versione MySQL di CHAR() accetta un USING clausola, mentre la versione T-SQL no. Ecco un esempio in cui specifico il punto di codice unicode usando MySQL:

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

Risultato:

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

Ed ecco cosa succede quando passo a SQL Server:

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

Risultato:

Incorrect syntax near 'USING'.

Esempio 3 – Byte di risultati multipli

In MySQL, gli argomenti più grandi di 255 vengono automaticamente convertiti in più byte di risultati. In SQL Server, gli argomenti maggiori di 255 restituiscono NULL .

Ecco un esempio usando MySQL:

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

Risultato:

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

E qui, proviamo a fare la stessa cosa in SQL Server:

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

Risultato:

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