MySQL поддържа използването на оператора за конкатенация на тръбите (||
) за конкатенация на неговите операнди. Въпреки това първо трябва да го активирате.
По подразбиране MySQL третира ||
като логическо OR
оператор (въпреки че това третиране в момента е отхвърлено). Стандартът ANSI обаче изисква това ||
е оператор на конкатенация. Може би имате код, който вече използва оператора за конкатенация на тръби и предпочитате да не преминавате и да променяте кода, за да използвате CONCAT()
функция.
За щастие MySQL ни предоставя възможността да посочим дали да го третираме като логическо OR
оператор или оператор на конкатенация.
Можете да активирате ||
като оператор на конкатенация, като зададете приложимата опция във вашия sql_mode
.
Имате две опции:
- Добавете
PIPES_AS_CONCAT
към вашияsql_mode
- Задайте
sql_mode
къмANSI
.
Опция 1
Тук добавям PIPES_AS_CONCAT
към моя sql_mode
:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',PIPES_AS_CONCAT'));
Вярно е, че можех просто да отида sql_mode = 'PIPES_AS_CONCAT'
, но щях да загубя всички съществуващи опции. Използването на горната техника гарантира, че няма да загубя съществуващи опции.
Опция 2
Друг начин да го направите е да зададете sql_mode
към ANSI
:
SET sql_mode='ANSI';
ANSI
режимът променя синтаксиса и поведението, за да съответства в по-голяма степен на стандартния SQL.
Проверете вашия sql_mode
Можете да проверите вашия sql_mode
така:
SELECT @@sql_mode;
Резултат:
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI
Това е резултатът, който получавам след промяна на ANSI
режим. Можем да видим PIPES_AS_CONCAT
е включен в списъка с опции.
Пример за конкатенация
След задаване на sql_mode
използвайки една от горните техники, вече можем да използваме ||
като оператор за конкатенация на тръби:
SELECT 'Homer' || 'Symptom';
Резултат:
HomerSymptom
Ако не бяхме активирали оператора за конкатенация на тръби, най-вероятно щяхме да получим неочакван резултат с предупреждение.