
回复
意外发现USER()和CURRENT_USER()的一点不同。
某次在用 ALTER USER
想要修改账户密码时,发现执行下面的SQL会报语法错误:
一开始百思不得其解,如果把 USER()
手动替换成对应的账户的话,则可以正常执行:
如果再改成 CURRENT_USER()
也是可以执行的:
看来是修改密码时不能调用 USER()
函数,但可以用 CURRENT_USER()
函数,那么这两个函数的区别是什么呢?
我们来看下文档中的解释:
简言之,CURRENT_USER()
返回的是当前用户所对应的授权账户,而 USER()
返回的是当前连接用户。这么说可能还有点疑惑,看下面的案例吧:
这下看明白了吧,也就是说,同一个授权账户,可能会从不同主机/不同方式连接到MySQL Server端,这时 CURRENT_USER()
返回的是对应的授权账户,而 USER()
返回的就是包含该账户当前连接的客户端地址,从不同主机连接过来后得到的结果也不同。
这样就可以解释一开始的问题了,为什么不能在修改密码时调用 USER()
函数,而只能用 CURRENT_USER()
函数了。
文章转载自公众号:GreatSQL社区