SET
Syntax
The SET
statement assigns values to different types of variables that affect the operation of the server or your client.
This section describes use of SET
for assigning values to variables. The SET
statement can be used to assign values to these types of variables:
- System variables. See , "Server System Variables". System variables also can be set at server startup, as described in , "Using System Variables".
User-defined variables. See , "User-Defined Variables".
- Stored procedure and function parameters, and stored program local variables. See , "Variables in Stored Programs".
Some variants of SET
syntax are used in other contexts:
SET CHARACTER SET
andSET NAMES
assign values to character set and collation variables associated with the connection to the server.SET ONE_SHOT
is used for replication. These variants are described later in this section.SET PASSWORD
assigns account passwords. See , "SET PASSWORD
Syntax".SET TRANSACTION ISOLATION LEVEL
sets the isolation level for transaction processing. See , "SET TRANSACTION
Syntax".
The following discussion shows the different SET
syntaxes that you can use to set variables. The examples use the =
assignment operator, but you can also use the :=
assignment operator for this purpose.
A user variable is written as @
and can be set as follows:
var_name
SET @var_name
=expr
;
Many system variables are dynamic and can be changed while the server runs by using the SET
statement. For a list, see , "Dynamic System Variables". To change a system variable with SET
, refer to it as var_name
, optionally preceded by a modifier:
- To indicate explicitly that a variable is a global variable, precede its name by
GLOBAL
or@@global.
. TheSUPER
privilege is required to set global variables. - To indicate explicitly that a variable is a session variable, precede its name by
SESSION
,@@session.
, or@@
. Setting a session variable requires no special privilege, but a client can change only its own session variables, not those of any other client. LOCAL
and@@local.
are synonyms forSESSION
and@@session.
.- If no modifier is present,
SET
changes the session variable.
A SET
statement can contain multiple variable assignments, separated by commas. For example, the statement can assign values to a user-defined variable and a system variable. If you set several system variables, the most recent GLOBAL
or SESSION
modifier in the statement is used for following variables that have no modifier specified.
Examples:
SET sort_buffer_size=10000; SET @@local.sort_buffer_size=10000; SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;
The @@
syntax for system variables is supported for compatibility with some other database systems.
var_name
If you change a session system variable, the value remains in effect until your session ends or until you change the variable to a different value. The change is not visible to other clients.
If you change a global system variable, the value is remembered and used for new connections until the server restarts. (To make a global system variable setting permanent, you should set it in an option file.) The change is visible to any client that accesses that global variable. However, the change affects the corresponding session variable only for clients that connect after the change. The global variable change does not affect the session variable for any client that is currently connected (not even that of the client that issues the SET GLOBAL
statement).
To prevent incorrect usage, MariaDB produces an error if you use SET GLOBAL
with a variable that can only be used with SET SESSION
or if you do not specify GLOBAL
(or @@global.
) when setting a global variable.
To set a SESSION
variable to the GLOBAL
value or a GLOBAL
value to the compiled-in MariaDB default value, use the DEFAULT
keyword. For example, the following two statements are identical in setting the session value of max_join_size
to the global value:
SET max_join_size=DEFAULT; SET @@session.max_join_size=@@global.max_join_size;
Not all system variables can be set to DEFAULT
. In such cases, use of DEFAULT
results in an error.
You can refer to the values of specific global or session system variables in expressions by using one of the @@
-modifiers. For example, you can retrieve values in a SELECT
statement like this:
SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;
When you refer to a system variable in an expression as @@
(that is, when you do not specify var_name
@@global.
or @@session.
), MariaDB returns the session value if it exists and the global value otherwise. (This differs from SET @@
, which always refers to the session value.)Note
var_name
= value
Some variables displayed by SHOW VARIABLES
may not be available using SELECT @@
syntax; an var_name
Unknown system variable
occurs. As a workaround in such cases, you can use SHOW VARIABLES LIKE '
.
var_name
'
Suffixes for specifying a value multiplier can be used when setting a variable at server startup, but not to set the value with SET
at runtime. On the other hand, with SET
you can assign a variable's value using an expression, which is not true when you set a variable at server startup. For example, the first of the following lines is legal at server startup, but the second is not:
shell>mysql --max_allowed_packet=16M
shell>mysql --max_allowed_packet=16*1024*1024
Conversely, the second of the following lines is legal at runtime, but the first is not:
mysql>SET GLOBAL max_allowed_packet=16M;
mysql>SET GLOBAL max_allowed_packet=16*1024*1024;
To display system variables names and values, use the SHOW VARIABLES
statement. (See , "SHOW VARIABLES
Syntax".)
The following list describes SET
options that have nonstandard syntax (that is, options that are not set with
syntax).
name
= value
CHARACTER SET {
charset_name
| DEFAULT}This maps all strings from and to the client with the given mapping. You can add new mappings by editing
sql/convert.cc
in the MariaDB source distribution.SET CHARACTER SET
sets three session system variables:character-set-client
andcharacter_set_results
are set to the given character set, andcharacter_set_connection
to the value ofcharacter_set_database
. See , "Connection Character Sets and Collations".The default mapping can be restored by using the value
DEFAULT
. The default depends on the server configuration.ucs2
,utf16
, andutf32
cannot be used as a client character set, which means that they do not work forSET CHARACTER SET
.NAMES {'
charset_name
' [COLLATE 'collation_name
'] | DEFAULT}SET NAMES
sets the three session system variablescharacter_set_client
,character_set_connection
, andcharacter_set_results
to the given character set. Settingcharacter_set_connection
tocharset_name
also setscollation_connection
to the default collation forcharset_name
. The optionalCOLLATE
clause may be used to specify a collation explicitly. See , "Connection Character Sets and Collations".The default mapping can be restored by using a value of
DEFAULT
. The default depends on the server configuration.ucs2
,utf16
, andutf32
cannot be used as a client character set, which means that they do not work forSET NAMES
.ONE_SHOT
ONE_SHOT
is for internal use only, has been deprecated since MariaDB 5.0, and was removed in MariaDB 5.6.1.