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_CONCATtill dittsql_mode - Ställ in
sql_modetillANSI.
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.