无法在MySQL上设置全局变量

12

我在本地主机上使用MySQL(在Ubuntu和Windows中)。我想设置一个全局变量,我已经尝试了所有的方法,但即使我从MySQL得到了“ok”消息,当我执行“select @var”时,它总是显示“NULL”。

我已经尝试过以下方法:

set global var=17;
set @global.var=17;
set @@var=17;

有人能帮我吗?

提前感谢。

附言:我拥有超级权限。


1
什么?"$"符号是用于Php中的变量,而不是MySQL。 - leonardo_palma
我们无法在全局/会话范围内创建用户定义的变量。 - Angad Bansode
3个回答

21

2
那么,无法设置并永久存储任意名称的变量吗? - leonardo_palma
1
是的,SET GLOBAL 用于修改预定义的 MySQL 系统变量。它不用于设置用户定义变量。我无法解释 MySQL 为什么会响应“OK”消息而不是发出错误。也许没有一个标准的 SQLSTATE 能够准确地表示这个错误,或者可能只是返回一个成功代码更容易;或者,这可能是关于未来升级的设计决策,并且对于已弃用和删除的系统变量有一定程度的向后兼容性。 - spencer7593
那么说 SET GLOBAL SQL_MODE = ''SET @@SQL_MODE = '' 是一样的,对吗?所以如果我没记错的话,@符号有点像替换了全局关键字,谢谢。 - Thielicious
@Thielicious: 不完全正确。@@sql_mode@@session.sql_mode 的简写。sql_mode 系统变量可以在 GLOBAL 和 SESSION 级别设置。会话变量在会话启动时继承相应全局变量的值。一些 MySQL 系统变量仅为全局变量,而其他变量(如 sql_mode)则既是全局变量也是会话变量。 - spencer7593

2
根据 MySQL 5.0 参考手册

用户自定义变量是会话特定的。也就是说,一个客户端定义的用户变量不能被其他客户端看到或使用。当客户端退出时,给定客户端会话的所有变量都会自动释放。

你可以考虑使用类似于 MySQL 全局用户变量 UDF (旧存档链接) 的扩展来使用全局(持久共享)变量。

0
在MySQL上,您无法创建自定义的全局或会话系统变量,但可以按如下所示更改现有的全局或会话系统变量:
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';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接