Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL CHAR() vs T-SQL CHAR():Qual é a diferença?


Existem muitas funções incluídas no MySQL e no SQL Server. No entanto, só porque ambos os SGBDs compartilham funções com o mesmo nome, não significa que essas funções funcionem exatamente da mesma maneira.

Pegue CHAR() por exemplo. Tanto o MySQL quanto o SQL Server incluem esta função. Bem, tecnicamente, para o SQL Server é na verdade uma função T-SQL, mas isso não vem ao caso. O ponto é que o MySQL CHAR() A função fornece mais funcionalidades do que o T-SQL/SQL Server CHAR() função.

Em particular, a versão MySQL aceita vários inteiros, enquanto a versão T-SQL aceita apenas um único inteiro. A versão do MySQL também aceita um USING cláusula que permite especificar qual conjunto de caracteres usar (a versão T-SQL não possui essa cláusula).

Abaixo estão alguns exemplos dessas diferenças.


Vários números inteiros


Aqui está o que acontece se fornecermos vários inteiros ao usar o MySQL:
SELECT CHAR(67, 97, 116) AS 'MySQL Result';

Resultado:
+--------------+
| MySQL Result |
+--------------+
| Cat          |
+--------------+

Assim, ele interpreta com sucesso cada inteiro e retorna os resultados.

Veja o que acontece se fizermos a mesma coisa usando o SQL Server:
SELECT CHAR(67, 97, 116) AS 'SQL Server Result';

Resultado:
The char function requires 1 argument(s).

Para obter o mesmo resultado do exemplo do MySQL, precisaríamos concatenar vários CHAR() funções. Algo assim:
SELECT CHAR(67) + CHAR(97) + CHAR(116) AS 'Concatenated Result';

Resultado:
+-----------------------+
| Concatenated Result   |
|-----------------------|
| Cat                   |
+-----------------------+

O USING Cláusula


A versão MySQL de CHAR() aceita um USING cláusula, enquanto a versão T-SQL não. Aqui está um exemplo onde eu especifico o ponto de código unicode usando MySQL:
SELECT CHAR(0x027FE USING ucs2) AS 'MySQL Result';

Resultado:
+--------------+
| MySQL Result |
+--------------+
| ⟾            |
+--------------+

E aqui está o que acontece quando mudo para o SQL Server:
SELECT CHAR(0x027FE USING ucs2) AS 'SQL Server Result';

Resultado:
Incorrect syntax near 'USING'.

Exemplo 3 – Bytes de resultados múltiplos


No MySQL, argumentos maiores que 255 são automaticamente convertidos em vários bytes de resultado. No SQL Server, argumentos maiores que 255 retornam NULL .

Aqui está um exemplo usando o MySQL:
SELECT HEX(CHAR(1799)) AS 'MySQL Result';

Resultado:
+--------------+
| MySQL Result |
+--------------+
| 0707         |
+--------------+

E aqui, tentamos fazer a mesma coisa no SQL Server:
SELECT CONVERT(VARCHAR(1000), CHAR(1799), 2) AS 'SQL Server Result';

Resultado:
+---------------------+
| SQL Server Result   |
|---------------------|
| NULL                |
+---------------------+