Domyślnie dwa znaki pionowe (||
) są traktowane jako logiczne OR
operator w MariaDB. Możesz jednak zmienić to zachowanie, jeśli chcesz.
Możesz zaktualizować swój sql_mode
aby uwzględnić PIPES_AS_CONCAT
opcja, w którym to przypadku dwie rury będą traktowane jako operator konkatenacji.
Istnieje kilka sposobów dodania tej opcji do twojego sql_mode
. Możesz to dodać wprost. Lub możesz ustawić swój sql_mode
na opcję, która ustawia ją niejawnie.
Poniżej przedstawiam te opcje.
Dodaj PIPES_AS_CONCAT
Jawnie
Jeśli nie chcesz zepsuć swojego istniejącego sql_mode
ustawienia, możesz uruchomić następujący kod:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',PIPES_AS_CONCAT'));
To dodaje PIPES_AS_CONCAT
bez usuwania czegokolwiek innego. Mogłem użyć 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.
Sprawdźmy mój istniejący sql_mode
ustawienia po uruchomieniu tego kodu:
SELECT @@sql_mode;
Wynik:
PIPES_AS_CONCAT,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Widzimy, że PIPES_AS_CONCAT
jest dołączony wraz z innymi opcjami, które już istniały.
ANSI
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.
Pamiętaj, że spowoduje to usunięcie wszystkich istniejących ustawień i użycie tylko tych ustawień, które dotyczą ANSI
opcja.
Aby to zademonstrować, spójrzmy jeszcze raz na mój sql_mode
po ustawieniu go na ANSI
:
SET sql_mode='ANSI';
SELECT @@sql_mode;
Wynik:
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI
Widzimy, że mój sql_mode
całkowicie się zmienił.
DB2
W ten sam sposób możemy ustawić nasz sql_mode
być bardziej w zgodzie z różnymi systemami DBMS.
Oto jak ustawić go tak, aby używał konwencji DB2:
SET sql_mode='DB2';
SELECT @@sql_mode;
Wynik:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,DB2,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS
To są opcje, które są zgodne z DB2.
Maksymalna baza danych
SET sql_mode='MAXDB';
SELECT @@sql_mode;
Wynik:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER
Serwer SQL
Użyj MSSQL
aby ustawić go tak, aby używał konwencji SQL Server:
SET sql_mode='MSSQL';
SELECT @@sql_mode;
Wynik:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MSSQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS
Wyrocznia
SET sql_mode='ORACLE';
SELECT @@sql_mode;
Wynik:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT
SIMULTANEOUS_ASSIGNMENT
opcja jest dodawana tylko w przypadku korzystania z MariaDB 10.3 i nowszych.
PostgreSQL
SET sql_mode='POSTGRESQL';
SELECT @@sql_mode;
Wynik:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,POSTGRESQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS