无法rake db:create:all--Cannot';t为{quot;encoding";=>;utf8";,“username";=>;root";,“adapter";=>;mysql";创建数据库;

无法rake db:create:all--Cannot';t为{quot;encoding";=>;utf8";,“username";=>;root";,“adapter";=>;mysql";创建数据库;,mysql,ruby-on-rails,ruby,Mysql,Ruby On Rails,Ruby,我正在尝试在我的计算机上安装并运行rails应用程序,但在创建数据库时遇到问题。我已经正确安装/设置了rails、mysql,并安装了mysql 2.8.1 gem(我用gem列表验证了这一点) 现在,我尝试运行“rake db:create:all”,我得到了以下错误: 无法为创建数据库 {“encoding”=>“utf8”, “用户名”=>“根”, “适配器”=>“mysql”、“数据库”=>“pyo”, “主机”=>“本地主机”,“密码”=>nil, “socket”=>“/tmp/my

我正在尝试在我的计算机上安装并运行rails应用程序,但在创建数据库时遇到问题。我已经正确安装/设置了rails、mysql,并安装了mysql 2.8.1 gem(我用gem列表验证了这一点)

现在,我尝试运行“rake db:create:all”,我得到了以下错误:

无法为创建数据库 {“encoding”=>“utf8”, “用户名”=>“根”, “适配器”=>“mysql”、“数据库”=>“pyo”, “主机”=>“本地主机”,“密码”=>nil, “socket”=>“/tmp/mysql.sock”},字符集: utf8,排序规则:utf8\u unicode\u ci(如果 您可以手动设置字符集,使 确定您有匹配的排序规则)

无法为创建数据库 {“encoding”=>“utf8”, “用户名”=>“根”, “适配器”=>“mysql”, “数据库”=>“pyo_测试”, “主机”=>“本地主机”,“密码”=>nil, “socket”=>“/tmp/mysql.sock”},字符集: utf8,排序规则:utf8\u unicode\u ci(如果 您可以手动设置字符集,使 确定您有匹配的排序规则)

我目前正在雪豹(10.6.6)上运行5.5.10 MySQL社区服务器(GPL)

下面是我的database.yml文件中的内容

development:
  adapter: mysql
  encoding: utf8
  database: pyo
  username: root
  password:
  socket: /tmp/mysql.sock
  host: localhost

test:
  adapter: mysql
  encoding: utf8
  database: pyo_test
  username: root
  password:
  socket: /tmp/mysql.sock
  host: localhost
我注意到错误的结尾是“字符集:utf8,排序规则:utf8\u unicode\u ci(如果手动设置字符集,请确保具有匹配的排序规则)”--这就是问题所在吗?如果是,我该如何修复它

我已经在这件事上纠缠了好几个小时,在谷歌上找不到任何有帮助的东西。所以,在这一点上,任何帮助都将不胜感激


谢谢!!

我想我有这样的问题…通过将此添加到数据库中修复。yml:

host: 127.0.0.1

或者在您的情况下,从localhost更改它。

因此,在谷歌搜索了大约3到4天并尝试了这么多不同的东西后,我不知何故偶然发现了这个问题:

猜猜怎么着?它工作得很好。这让我相信问题出在MySQL 5.5.10中。关于它的一些东西不仅会在我的ruby/rails环境中发挥作用。但是,一旦我按照上面链接上的说明进行操作(包括卸载MySQL和重新安装5.1),我的应用程序现在可以在本地机器上完美运行


希望这对其他人有帮助!

我在mysql2 gem上也遇到了同样的问题。然后我发现我的MySQL只监听“localhost”而不是“127.0.0.1”,所以我把它改成了“localhost”,现在我再也没有这个问题了。现在一切都正常了。

我知道这个帖子很老了,但作为一个it人员,我相信保持良好的文档质量这里有一个地方是:

问题实际上源于“config/database.yml”文件。您将ROR指向MySQL套接字的错误位置

我遇到了这个问题,结果是gem是在mac系统上构建的,开发人员没有考虑其他操作系统,而是将他的“mysql.sock”文件放在“/tmp”目录中,而不是“/var/run/mysqld/mysqld.sock”

所以他的“database.yml”文件看起来像:

开发:
适配器:mysql2
#编码:utf8
数据库:somedatabase
游泳池:5
用户名:someusername
密码:somepassword
socket:/tmp/mysql.sock

因为我使用的是Ubuntu系统,所以我不得不将我的更改为:

开发:
适配器:mysql2
#编码:utf8
数据库:somedatabase
游泳池:5
用户名:someusername
密码:somepassword
socket:/var/run/mysqld/mysqld.sock

是的,该错误可能会产生误导,但它与您的“编码”无关,也与您是否正在使用localhost或127.0.0.1(至少在linux/UNIX系统中,这些错误转换为同一事物并同义)

开始编辑

同样,像我上面那样注释掉编码也不好。因此我在这里提供修改以供参考

开发:
适配器:mysql2
编码:utf8
数据库:somedatabase
游泳池:5
用户名:someusername
密码:somepassword
socket:/var/run/mysqld/mysqld.sock


结束编辑

我想分享我的解决方案。 我的database.yml如下

default: &default
  adapter: mysql2
  encoding: utf8
  username: root
  password: 
  host: 127.0.0.1
  port: 3306

development:
  <<: *default
  database: dev.database
所以,我写没有()


今天遇到了一条类似的错误消息,这个方法对我很有效,谢谢。你找到解决这个问题的方法了吗?有一个有意义的解释吗?在我的例子中,如果你从Ubuntu切换到Mac。不用说,但这里有一个快速解决方案
socket:/tmp/mysql.sock
database: dev.database
database: devdatabase