MySQL stöder användningen av rörsammansättningsoperatorn (||
) för att sammanfoga dess operander. Du måste dock aktivera det först.
Som standard behandlar MySQL ||
som en logisk OR
operatör (även om denna behandling för närvarande är utfasad). ANSI-standarden kräver dock att ||
är en sammanlänkningsoperatör. Du kanske har kod som redan använder rörsammansättningsoperatorn, och du vill helst inte gå igenom och ändra koden för att använda CONCAT()
funktion.
Lyckligtvis ger MySQL oss möjligheten att specificera om det ska behandlas som en logisk OR
operator eller en sammanlänkningsoperator.
Du kan aktivera ||
som en sammanlänkningsoperator genom att ställa in tillämpligt alternativ i ditt sql_mode
.
Du har två alternativ:
- Lägg till
PIPES_AS_CONCAT
till dittsql_mode
- Ställ in
sql_mode
tillANSI
.
Alternativ 1
Här lägger jag till PIPES_AS_CONCAT
till mitt sql_mode
:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',PIPES_AS_CONCAT'));
Det är sant att jag bara kunde ha gått sql_mode = 'PIPES_AS_CONCAT'
, men jag skulle ha tappat alla befintliga alternativ. Att använda ovanstående teknik säkerställer att jag inte förlorar några befintliga alternativ.
Alternativ 2
Ett annat sätt att göra det är att ställa in sql_mode
till ANSI
:
SET sql_mode='ANSI';
ANSI
läget ändrar syntax och beteende för att överensstämma mer med standard SQL.
Kontrollera ditt sql_mode
Du kan kontrollera ditt sql_mode
så här:
SELECT @@sql_mode;
Resultat:
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI
Det är resultatet jag får efter att ha ändrat till ANSI
läge. Vi kan se PIPES_AS_CONCAT
ingår i listan med alternativ.
Konkateneringsexempel
Efter att ha ställt in sql_mode
med någon av ovanstående tekniker kan vi nu använda ||
som rörsammansättningsoperatör:
SELECT 'Homer' || 'Symptom';
Resultat:
HomerSymptom
Om vi inte hade aktiverat rörsammansättningsoperatören hade vi med största sannolikhet fått ett oväntat resultat, med en varning.