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 tabelauser
no banco de dadosMariaDB
e a colunaUser
nesta tabela se torna reservada, assim você deve colocá-la entre aspas:SELECT 'User' FROM mysql.'user';
REAL
é um sinônimo paraFLOAT
no 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 BY
que 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: