MySQL prend en charge l'utilisation de l'opérateur de concaténation de canal (||
) pour concaténer ses opérandes. Cependant, vous devez d'abord l'activer.
Par défaut, MySQL traite ||
sous la forme d'un OR
logique opérateur (bien que ce traitement soit actuellement obsolète). Cependant, la norme ANSI exige que ||
est un opérateur de concaténation. Peut-être avez-vous du code qui utilise déjà l'opérateur de concaténation de canal, et vous préférez ne pas passer par et modifier le code pour utiliser le CONCAT()
fonction.
Heureusement, MySQL nous offre la possibilité de spécifier s'il faut le traiter comme un OR
logique opérateur ou un opérateur de concaténation.
Vous pouvez activer ||
en tant qu'opérateur de concaténation en définissant l'option applicable dans votre sql_mode
.
Vous avez deux options :
- Ajouter
PIPES_AS_CONCAT
à votresql_mode
- Définir
sql_mode
àANSI
.
Option 1
Ici, j'ajoute PIPES_AS_CONCAT
à mon sql_mode
:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',PIPES_AS_CONCAT'));
C'est vrai que j'aurais pu juste aller sql_mode = 'PIPES_AS_CONCAT'
, mais j'aurais perdu toutes les options existantes. L'utilisation de la technique ci-dessus garantit que je ne perds aucune option existante.
Option 2
Une autre façon de le faire est de définir le sql_mode
à ANSI
:
SET sql_mode='ANSI';
ANSI
le mode modifie la syntaxe et le comportement pour se conformer plus étroitement au SQL standard.
Vérifiez votre sql_mode
Vous pouvez vérifier votre sql_mode
comme ceci :
SELECT @@sql_mode;
Résultat :
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI
C'est le résultat que j'obtiens après avoir changé en ANSI
mode. Nous pouvons voir le PIPES_AS_CONCAT
est inclus dans la liste des options.
Exemple de concaténation
Après avoir défini le sql_mode
en utilisant l'une des techniques ci-dessus, nous pouvons maintenant utiliser ||
en tant qu'opérateur de concaténation de tube :
SELECT 'Homer' || 'Symptom';
Résultat :
HomerSymptom
Si nous n'avions pas activé l'opérateur de concaténation de canal, nous aurions très probablement obtenu un résultat inattendu, avec un avertissement.