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
Ако не бяхме активирали оператора за конкатенация на тръби, най-вероятно щяхме да получим неочакван резултат с предупреждение.