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 | +---------------------+