I server MariadB e MySQL supportano diverse modalità che permettono di adattare i loro comportamenti ai propri bisogni.

La variabile più importante in tal senso è SQL_MODE.

Esso è una stringa contenente valori separati da virgole (',').

E' possibile conoscerne il valore locale e quello globale in questo modo:

SELECT @@SQL_MODE, @@GLOBAL.SQL_MODE;

E' possibile cambiare SQL_MODE dalla riga di comando (opzione --sql-mode) o impostando la variabile.

I diversi valori di SQL_MODE sono i seguenti:

OpzioneSpiegazione
ALLOW_INVALID_DATESPermette qualsiasi giorno tra 1-31 nelle date. Può essere comodo se si desidera inserire tutto (compresi i dati errati) nel database e manipolarlo in seguito.
ANSIModifica la sintassi SQL perché sia più vicina all'ANSI SQL. Imposta
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE
ANSI_QUOTESModifica " perché sia trattato come `, le virgolette per gli identificatori. Questo potrebbe creare problemi alle vecchie applicazioni che usano " come virgolette per le stringhe.
DB2Equivale a:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,DB2,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS
ERROR_FOR_DIVISION_BY_ZERORestituisce un errore (invece di uno warning) se avviene una divisione per zero. Se questa opzione non è impostata, le divisioni per zero restituiscono NULL.
HIGH_NOT_PRECEDENCEOpzione di compatibilità con MySQL 5.0.1 e precedenti; modifica NOT a BETWEEN b AND c perché sia interpretato come (NOT a) BETWEEN a AND c
IGNORE_BAD_TABLE_OPTIONSSe impostato, genera un errore (non uno warning) quando una CREATE TABLE contiene delle opzioni di tabella non valide.
IGNORE_SPACEPermette di inserire degli spazi tra i nomi di funzione e '('. In questo modo però le funzioni built-in diventano parole riservate.
MAXDBEquivale a:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER
MSSQLEquivale a:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MSSQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS
MYSQL323Equivale a:
MYSQL323,HIGH_NOT_PRECEDENCE
MYSQL40Equivale a:
MYSQL40,HIGH_NOT_PRECEDENCE
NO_AUTO_CREATE_USERNon crea automaticamente gli utenti con una GRANT
NO_AUTO_VALUE_ON_ZEROSe impostato, non genera un valore AUTO_INCREMENT quando quando viene inserito uno zero in una colonna AUTO_INCREMENT. Normalmente zero e NULL generano nuovi valori AUTO_INCREMENT.
NO_BACKSLASH_ESCAPES
NO_DIR_IN_CREATE
NO_ENGINE_SUBSTITUTIONSe impostato, genera un errore quando si crea una tabella ma lo Storage Engine desiderato non è presente
NO_FIELD_OPTIONSRimuove le opzioni di colonna specifiche di MariaDB dall'output di SHOW CREATE TABLE. E' usato anche da mysqldump in modalità portabile
NO_KEY_OPTIONSRimuove le opzioni degli indici specifiche di MariaDB dall'output di SHOW CREATE TABLE. E' usato anche da mysqldump in modalità portabile
NO_TABLE_OPTIONSRimuove le opzioni di tabella specifiche di MariaDB dall'output di SHOW CREATE TABLE. E' usato anche da mysqldump in modalità portabile
NO_UNSIGNED_SUBTRACTIONSe abilitato, i risultati delle sotrazioni sono SIGNED anche se gli operandi sono UNSIGNED
NO_ZERO_DATENon ammette la data '000-00-00', in strict mode. Le date zero possono però essere inserite con IGNORE. Se lo strict mode non è selezionato, viene generato un warning.
NO_ZERO_IN_DATENon ammette date dove il mese o il giorno sono zero, ma non l'anno. Ad esempio, anche se l'opzione è impostata, '0000-00-00' è ammesso, mentre '1970-00-10' o '1929-01-00' non lo sono. Se viene usata l'opzione IGNORE, MariaDB inserisce '0000-00-00' in luogo di tali date. Se lo strict mode non è attivo, viene generato solo un warning.
ONLY_FULL_GROUP_BY
ORACLEEquivale a:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER
PAD_CHAR_TO_FULL_LENGTH
PIPES_AS_CONCAT
POSTGRESQLEquivale a:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,POSTGRESQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS
REAL_AS_FLOAT
STRICT_ALL_TABLES
STRICT_TRANS_TABLES
TRADITIONALFa sì che MySQL funzioni come un server SQL tradizionale. Equivale a:
STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER

Commenti

Sto caricando i commenti......