我在本地主机上使用MySQL(在Ubuntu和Windows中)。我想设置一个全局变量,我已经尝试了所有的方法,但即使我从MySQL得到了“ok”消息,当我执行“select @var”时,它总是显示“NULL”。
我已经尝试过以下方法:
set global var=17;
set @global.var=17;
set @@var=17;
有人能帮我吗?
提前感谢。
附言:我拥有超级权限。
我在本地主机上使用MySQL(在Ubuntu和Windows中)。我想设置一个全局变量,我已经尝试了所有的方法,但即使我从MySQL得到了“ok”消息,当我执行“select @var”时,它总是显示“NULL”。
我已经尝试过以下方法:
set global var=17;
set @global.var=17;
set @@var=17;
有人能帮我吗?
提前感谢。
附言:我拥有超级权限。
变量名var
没有引用有效的系统变量。在设置MySQL系统变量时,SET
语句中的GLOBAL
和SESSION
关键字用于指定范围,而不是MySQL用户变量。
例如尝试:
SELECT @@global.net_read_timeout ;
SET GLOBAL net_read_timeout = 45 ;
SELECT @@global.net_read_timeout ;
SET GLOBAL
用于修改预定义的 MySQL 系统变量。它不用于设置用户定义变量。我无法解释 MySQL 为什么会响应“OK”消息而不是发出错误。也许没有一个标准的 SQLSTATE 能够准确地表示这个错误,或者可能只是返回一个成功代码更容易;或者,这可能是关于未来升级的设计决策,并且对于已弃用和删除的系统变量有一定程度的向后兼容性。 - spencer7593SET GLOBAL SQL_MODE = ''
和 SET @@SQL_MODE = ''
是一样的,对吗?所以如果我没记错的话,@符号有点像替换了全局关键字,谢谢。 - Thielicious@@sql_mode
是 @@session.sql_mode
的简写。sql_mode
系统变量可以在 GLOBAL 和 SESSION 级别设置。会话变量在会话启动时继承相应全局变量的值。一些 MySQL 系统变量仅为全局变量,而其他变量(如 sql_mode
)则既是全局变量也是会话变量。 - spencer7593你可以考虑使用类似于 MySQL 全局用户变量 UDF (旧存档链接) 的扩展来使用全局(持久共享)变量。用户自定义变量是会话特定的。也就是说,一个客户端定义的用户变量不能被其他客户端看到或使用。当客户端退出时,给定客户端会话的所有变量都会自动释放。
SET GLOBAL max_connections = 1000; -- Existed global system variable
SET SESSION sql_mode = 'TRADITIONAL'; -- Existed session system variable
此外,您可以创建 用户自定义变量。这些变量在退出(注销)会话时被删除,如下所示。用户自定义变量仅存在于当前会话中,因此除非您使用 performance_schema.user_variables_by_thread,否则其他会话无法看到这些变量。:
SET @first_name = 'John', @last_name = 'Smith';