MySQL ondersteunt het gebruik van de pipe concatenation-operator (||
) voor het aaneenschakelen van zijn operanden. U moet het echter eerst inschakelen.
Standaard behandelt MySQL ||
als een logische OR
operator (hoewel deze behandeling momenteel verouderd is). De ANSI-standaard vereist echter dat ||
is een aaneenschakelingsoperator. Misschien heeft u code die al gebruikmaakt van de pipe-concatenatie-operator, en wilt u liever niet doorgaan en de code wijzigen om de CONCAT()
te gebruiken functie.
Gelukkig biedt MySQL ons de mogelijkheid om te specificeren of het moet worden behandeld als een logische OR
operator of een concatenatie-operator.
U kunt ||
. inschakelen als een aaneenschakelingsoperator door de toepasselijke optie in uw sql_mode
. in te stellen .
Je hebt twee opties:
- Voeg
PIPES_AS_CONCAT
toe naar uwsql_mode
- Stel
sql_mode
in naarANSI
.
Optie 1
Hier voeg ik PIPES_AS_CONCAT
. toe naar mijn sql_mode
:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',PIPES_AS_CONCAT'));
Het is waar dat ik gewoon had kunnen gaan sql_mode = 'PIPES_AS_CONCAT'
, maar dan zou ik alle bestaande opties kwijt zijn. Door de bovenstaande techniek te gebruiken, zorg ik ervoor dat ik geen bestaande opties verlies.
Optie 2
Een andere manier om dit te doen is door de sql_mode
. in te stellen naar ANSI
:
SET sql_mode='ANSI';
ANSI
modus verandert de syntaxis en het gedrag om beter overeen te komen met standaard SQL.
Controleer uw sql_mode
U kunt uw sql_mode
. controleren zoals dit:
SELECT @@sql_mode;
Resultaat:
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI
Dat is het resultaat dat ik krijg na het veranderen naar ANSI
modus. We kunnen de PIPES_AS_CONCAT
. zien is opgenomen in de lijst met opties.
Aaneenschakelingsvoorbeeld
Na het instellen van de sql_mode
met een van de bovenstaande technieken kunnen we nu ||
. gebruiken als operator voor pijpaaneenschakeling:
SELECT 'Homer' || 'Symptom';
Resultaat:
HomerSymptom
Als we de operator voor pijpaaneenschakeling niet hadden ingeschakeld, hadden we hoogstwaarschijnlijk een onverwacht resultaat gekregen, met een waarschuwing.