MySQL podporuje použití operátoru zřetězení potrubí (||
) pro zřetězení jeho operandů. Nejprve jej však musíte povolit.
Ve výchozím nastavení MySQL zpracovává ||
jako logické OR
operátor (ačkoli tato úprava je v současné době zastaralá). Standard ANSI však vyžaduje ||
je operátor zřetězení. Možná máte kód, který již používá operátor zřetězení potrubí, a raději byste neprocházeli a neměnili kód tak, aby používal CONCAT()
funkce.
Naštěstí nám MySQL poskytuje možnost určit, zda s tím zacházet jako s logickým OR
operátor nebo operátor zřetězení.
Můžete povolit ||
jako operátor zřetězení nastavením příslušné možnosti ve vašem sql_mode
.
Máte dvě možnosti:
- Přidejte
PIPES_AS_CONCAT
do vašehosql_mode
- Nastavte
sql_mode
naANSI
.
Možnost 1
Zde přidávám PIPES_AS_CONCAT
do mého sql_mode
:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',PIPES_AS_CONCAT'));
Je pravda, že jsem mohl jít sql_mode = 'PIPES_AS_CONCAT'
, ale ztratil bych všechny stávající možnosti. Použití výše uvedené techniky zajistí, že neztratím žádné existující možnosti.
Možnost 2
Dalším způsobem, jak to udělat, je nastavit sql_mode
na ANSI
:
SET sql_mode='ANSI';
ANSI
režim mění syntaxi a chování tak, aby více odpovídaly standardnímu SQL.
Zkontrolujte svůj sql_mode
Můžete zkontrolovat svůj sql_mode
takhle:
SELECT @@sql_mode;
Výsledek:
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI
To je výsledek, který dostanu po změně na ANSI
režimu. Můžeme vidět PIPES_AS_CONCAT
je zahrnuto v seznamu možností.
Příklad zřetězení
Po nastavení sql_mode
pomocí jedné z výše uvedených technik můžeme nyní použít ||
jako operátor zřetězení potrubí:
SELECT 'Homer' || 'Symptom';
Výsledek:
HomerSymptom
Pokud bychom nepovolili operátor zřetězení potrubí, s největší pravděpodobností bychom dostali neočekávaný výsledek s varováním.