Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL CHAR() vs T-SQL CHAR() :quelle est la différence ?

De nombreuses fonctions sont incluses à la fois dans MySQL et SQL Server. Cependant, ce n'est pas parce que les deux SGBD partagent des fonctions du même nom que ces fonctions fonctionnent exactement de la même manière.

Prenez CHAR() par exemple. MySQL et SQL Server incluent tous deux cette fonction. Eh bien, techniquement, pour SQL Server, il s'agit en fait d'une fonction T-SQL, mais ce n'est pas la question. Le fait est que MySQL CHAR() La fonction fournit plus de fonctionnalités que T-SQL/SQL Server CHAR() fonction.

En particulier, la version MySQL accepte plusieurs entiers, alors que la version T-SQL n'accepte qu'un seul entier. La version MySQL accepte également un USING clause qui vous permet de spécifier le jeu de caractères à utiliser (la version T-SQL n'a pas cette clause).

Vous trouverez ci-dessous quelques exemples de ces différences.

Entiers multiples

Voici ce qui se passe si nous fournissons plusieurs entiers lors de l'utilisation de MySQL :

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

Résultat :

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

Ainsi, il interprète avec succès chaque entier et renvoie les résultats.

Voici ce qui se passe si nous faisons la même chose en utilisant SQL Server :

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

Résultat :

The char function requires 1 argument(s).

Pour obtenir le même résultat que l'exemple MySQL, nous aurions besoin de concaténer plusieurs CHAR() les fonctions. Quelque chose comme ça :

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

Résultat :

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

Le USING Article

La version MySQL de CHAR() accepte un USING clause, contrairement à la version T-SQL. Voici un exemple où je spécifie le point de code Unicode à l'aide de MySQL :

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

Résultat :

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

Et voici ce qui se passe lorsque je passe à SQL Server :

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

Résultat :

Incorrect syntax near 'USING'.

Exemple 3 – Plusieurs octets de résultat

Dans MySQL, les arguments supérieurs à 255 sont automatiquement convertis en plusieurs octets de résultat. Dans SQL Server, les arguments supérieurs à 255 renvoient NULL .

Voici un exemple utilisant MySQL :

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

Résultat :

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

Et ici, on essaie de faire la même chose dans SQL Server :

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

Résultat :

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