为什么我得到“拒绝用户'root'@'localhost'”?

时间:2013-08-26 14:52:41

标签: mysql ruby sinatra

我正在使用此代码连接到MySQL数据库:

username="root"
password="admin"
host="localhost"
db="one"
Mysql.new(host,username,password,db)

执行代码时出现此错误:

Access denied for user 'root'@'localhost' (using password: YES)

如果我使用Mysql.new('localhost','root','admin','one'),那么它可以正常工作。

当我打印所有变量时,将打印正确的值。

请帮我弄清楚出了什么问题。

1 个答案:

答案 0 :(得分:4)

基本故障排除101:

如果文字字符串有效,而变量赋值没有,则怀疑你的变量赋值;其中一个可能有问题,比如看不见的角色。

尝试:

vars = ('localhost','root','admin','one')
Mysql.new(*vars)

然后尝试:

vars = %w(localhost root admin one)
Mysql.new(*vars)

或:

host, username, password, db = %w(localhost root admin one)
Mysql.new(host, username, password, db)

或:

host, username, password, db = 'localhost','root','admin','one'
Mysql.new(host, username, password, db)

我们的想法是从您所知道的工作开始,然后向后工作,直到分配给变量工作,或者它会中断。那时你已经解决了问题(可能不知道为什么),或者你已经知道了什么打破了它。无论哪种方式,你都领先。

你说:

  

当我打印所有变量时,将打印正确的值。

您如何打印变量?我们看不到您的终端,而您没有向我们提供该信息。如果它是一个隐形字符,这是复制和粘贴文本时常见的罪魁祸首,它可能在打印时不会显示。检查变量应该有所帮助,因为它们应该显示为转义值:

password = "root\u00a0"

puts password
# >> root 

puts password.inspect
# >> "root "

puts password.chars
# >> r
# >> o
# >> o
# >> t
# >>  

puts password.unpack('C*').map{ |s| s.to_s(16) }
# >> 72
# >> 6f
# >> 6f
# >> 74
# >> c2
# >> a0

否则,我回到原来的评论,这是关于如何设置MySQL root帐户的问题,你应该阅读“Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error)”。