sql >> Base de Datos >  >> RDS >> Mysql

MySQL CHAR() vs T-SQL CHAR():¿Cuál es la diferencia?

Hay muchas funciones que se incluyen tanto en MySQL como en SQL Server. Sin embargo, el hecho de que ambos DBMS compartan funciones con el mismo nombre no significa que esas funciones funcionen exactamente de la misma manera.

Toma CHAR() por ejemplo. Tanto MySQL como SQL Server incluyen esta función. Bueno, técnicamente, para SQL Server en realidad es una función T-SQL, pero eso no viene al caso. El punto es que MySQL CHAR() La función proporciona más funcionalidad que T-SQL/SQL Server CHAR() función.

En particular, la versión de MySQL acepta varios enteros, mientras que la versión de T-SQL solo acepta un único entero. La versión de MySQL también acepta un USING cláusula que le permite especificar qué juego de caracteres usar (la versión de T-SQL no tiene esta cláusula).

A continuación se muestran algunos ejemplos de estas diferencias.

Múltiples enteros

Esto es lo que sucede si proporcionamos varios enteros cuando usamos MySQL:

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

Resultado:

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

Entonces interpreta con éxito cada número entero y devuelve los resultados.

Esto es lo que sucede si hacemos lo mismo usando SQL Server:

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

Resultado:

The char function requires 1 argument(s).

Para lograr el mismo resultado que el ejemplo de MySQL, necesitaríamos concatenar múltiples CHAR() funciones Algo como esto:

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

Resultado:

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

El USING Cláusula

La versión MySQL de CHAR() acepta un USING cláusula, mientras que la versión T-SQL no lo hace. Aquí hay un ejemplo donde especifico el punto de código Unicode usando MySQL:

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

Resultado:

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

Y esto es lo que sucede cuando cambio a SQL Server:

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

Resultado:

Incorrect syntax near 'USING'.

Ejemplo 3:varios bytes de resultados

En MySQL, los argumentos mayores de 255 se convierten automáticamente en múltiples bytes de resultado. En SQL Server, los argumentos mayores de 255 devuelven NULL .

Aquí hay un ejemplo usando MySQL:

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

Resultado:

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

Y aquí, tratamos de hacer lo mismo en SQL Server:

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

Resultado:

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