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:
Opzione | Spiegazione |
---|---|
ALLOW_INVALID_DATES | Permette 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. |
ANSI | Modifica la sintassi SQL perché sia più vicina all'ANSI SQL. ImpostaREAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE |
ANSI_QUOTES | Modifica " perché sia trattato come ` , le virgolette per gli identificatori. Questo potrebbe creare problemi alle vecchie applicazioni che usano " come virgolette per le stringhe. |
DB2 | Equivale a:PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,DB2,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS |
ERROR_FOR_DIVISION_BY_ZERO | Restituisce 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_PRECEDENCE | Opzione 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_OPTIONS | Se impostato, genera un errore (non uno warning) quando una CREATE TABLE contiene delle opzioni di tabella non valide. |
IGNORE_SPACE | Permette di inserire degli spazi tra i nomi di funzione e '('. In questo modo però le funzioni built-in diventano parole riservate. |
MAXDB | Equivale a:PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER |
MSSQL | Equivale a:PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MSSQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS |
MYSQL323 | Equivale a:MYSQL323,HIGH_NOT_PRECEDENCE |
MYSQL40 | Equivale a:MYSQL40,HIGH_NOT_PRECEDENCE |
NO_AUTO_CREATE_USER | Non crea automaticamente gli utenti con una GRANT |
NO_AUTO_VALUE_ON_ZERO | Se 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_SUBSTITUTION | Se impostato, genera un errore quando si crea una tabella ma lo Storage Engine desiderato non è presente |
NO_FIELD_OPTIONS | Rimuove le opzioni di colonna specifiche di MariaDB dall'output di SHOW CREATE TABLE. E' usato anche da mysqldump in modalità portabile |
NO_KEY_OPTIONS | Rimuove le opzioni degli indici specifiche di MariaDB dall'output di SHOW CREATE TABLE. E' usato anche da mysqldump in modalità portabile |
NO_TABLE_OPTIONS | Rimuove le opzioni di tabella specifiche di MariaDB dall'output di SHOW CREATE TABLE. E' usato anche da mysqldump in modalità portabile |
NO_UNSIGNED_SUBTRACTION | Se abilitato, i risultati delle sotrazioni sono SIGNED anche se gli operandi sono UNSIGNED |
NO_ZERO_DATE | Non 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_DATE | Non 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 | |
ORACLE | Equivale 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 | |
POSTGRESQL | Equivale 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 | |
TRADITIONAL | Fa 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 |
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.