许多MySQL程序都有内部变量,可以在运行时使用该 SET
语句设置。请参见第13.7.6.1节“变量分配的SET语法”和 第5.1.9节“使用系统变量”。
还可以使用与指定程序选项相同的语法在服务器启动时设置这些程序变量中的大多数。例如,mysql有一个 max_allowed_packet
变量来控制其通信缓冲区的最大大小。要将mysql的max_allowed_packet
变量 设置 为16MB,请使用以下命令之一:
mysql --max_allowed_packet=16777216 mysql --max_allowed_packet=16M
复制
第一个命令以字节为单位指定值。第二个以兆字节为单位指定值。对于采用数字值的变量,该值可以与一个后缀被给予 K
,M
或者 G
以指示1024一乘法器,1024 2或1024 3。(例如,用于设置时 max_allowed_packet
,后缀表示以千字节,兆字节或千兆字节为单位)。如MySQL的8.0.14的,后缀也可以是T
, P
和E
以指示1024乘法器4,1024 5或1024 6。后缀字母可以是大写或小写。
在选项文件中,变量设置不带前导破折号:
[mysql]
max_allowed_packet=16777216
复制
要么:
[mysql]
max_allowed_packet=16M
复制
如果愿意,可以将变量名称中的下划线指定为破折号。以下选项组是等效的。两者都将服务器密钥缓冲区的大小设置为512MB:
[mysqld]
key_buffer_size=512M
[mysqld]
key-buffer-size=512M
复制
可以通过完整或任何明确的前缀将其写入来指定变量。例如,该 max_allowed_packet
变量可以被设置 的MySQL为--max_a
,但不作为 --max
,因为后者是不明确的:
shell> mysql --max=1000000 mysql: ambiguous option '--max=1000000' (max_allowed_packet, max_join_size)
复制
请注意,在为程序实现新变量的情况下,使用变量前缀可能会导致问题。现在明确的前缀将来可能会变得不明确。
在程序调用时设置变量时可以使用指定值乘数的后缀,但不能SET
在运行时使用来设置值 。另一方面,通过使用 SET
,您可以使用表达式分配变量的值,而在服务器启动时设置变量时则不正确。例如,以下第一行在程序调用时是合法的,但第二行不是:
shell> mysql --max_allowed_packet=16M shell> mysql --max_allowed_packet=16*1024*1024
复制
相反,以下第二行在运行时合法,但第一行则不合法:
mysql> SET GLOBAL max_allowed_packet=16M;
mysql> SET GLOBAL max_allowed_packet=16*1024*1024;
复制