MySQL obsługuje użycie operatora konkatenacji potoku (||
) do łączenia jego operandów. Jednak musisz go najpierw włączyć.
Domyślnie MySQL traktuje ||
jako logiczne OR
operator (chociaż to traktowanie jest obecnie przestarzałe). Jednak standard ANSI wymaga, aby ||
jest operatorem konkatenacji. Być może masz kod, który już używa operatora konkatenacji potoku i wolałbyś nie przechodzić i zmieniać kodu tak, aby używał CONCAT()
funkcja.
Na szczęście MySQL daje nam możliwość określenia, czy traktować go jako logiczne OR
operator lub operator konkatenacji.
Możesz włączyć ||
jako operator konkatenacji, ustawiając odpowiednią opcję w swoim sql_mode
.
Masz dwie opcje:
- Dodaj
PIPES_AS_CONCAT
do twojegosql_mode
- Ustaw
sql_mode
doANSI
.
Opcja 1
Tutaj dodaję PIPES_AS_CONCAT
do mojego sql_mode
:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',PIPES_AS_CONCAT'));
To prawda, że mogłem po prostu przejść sql_mode = 'PIPES_AS_CONCAT'
, ale straciłbym wszystkie istniejące opcje. Korzystanie z powyższej techniki zapewnia, że nie stracę żadnych istniejących opcji.
Opcja 2
Innym sposobem na to jest ustawienie sql_mode
do ANSI
:
SET sql_mode='ANSI';
ANSI
mode zmienia składnię i zachowanie, aby były bardziej zgodne ze standardowym SQL.
Sprawdź swój sql_mode
Możesz sprawdzić swój sql_mode
tak:
SELECT @@sql_mode;
Wynik:
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI
Taki wynik otrzymuję po zmianie na ANSI
tryb. Widzimy PIPES_AS_CONCAT
znajduje się na liście opcji.
Przykład konkatenacji
Po ustawieniu sql_mode
używając jednej z powyższych technik, możemy teraz użyć ||
jako operator konkatenacji potoku:
SELECT 'Homer' || 'Symptom';
Wynik:
HomerSymptom
Gdybyśmy nie włączyli operatora łączenia potoków, najprawdopodobniej otrzymalibyśmy nieoczekiwany wynik z ostrzeżeniem.