SQL_MODE

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......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.