Executando o MariaDB no modo ANSI
Se você inicializa o mysqld com a opção --ansi ou --sql-mode=ANSI, o seguinte comportamento é alterado no MySQL:
||é um oprador de concatenação de strings em vez de um sinônimo paraOR.- '
'' é tratado como um caracter identificados (com o caracter de aspasr '`' do MariaDB Server)e não um caracter de string. Você ainda pode usar '`' para citar identificadores no modo ANSI. Uma implicação disto é que você não pode usar aspas duplas para citar um string literal, porque ela será intepretada como um identificador. - Você pode ter qualquer número de espaços entre um nome de função e o '
('. Isto faz com que todos nomes de funções sejam tratadas como palavras reservadas. Como resultado, se você quiser acessar qualquer banco de dados, tabelas ou coluna que é uma palavra reservada, você deve colocá-lo entre aspas. Por exemplo, por haver a funçãoUSER(), o nome da tabelauserno banco de dadosMariaDBe a colunaUsernesta tabela se torna reservada, assim você deve colocá-la entre aspas:SELECT 'User' FROM mysql.'user';
REALé um sinônimo paraFLOATno lugar de um sinônimo deDOUBLE.- O nível de isolamento padrão de um transação é
SERIALIZABLE. Leia "SintaxeSET TRANSACTION". - Você pode usar um campo/expressão em
GROUP BYque não está na lista de campos.
Executando o servidor em modo ANSI é o mesmo que iniciá-lo com estas opções:
--sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES, IGNORE_SPACE,ONLY_FULL_GROUP_BY --transaction-isolation=serializable
No MySQL, você pode conseguir o mesmo efeito com estas duas instruções:
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET GLOBAL sql_mode= 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY';
No MariaDB a última opção sql_mode também pode ser dada com:
SET GLOBAL sql_mode='ansi';
No caso acima o sql_mode estará configurado com todas as opções que são relevantes para o modo ANSI. Você pode verificar o resultado fazendo: