Mysql 无需将字符串隐式转换为哈希(smarter_csv gem,上载带有输入的文件)

Mysql 无需将字符串隐式转换为哈希(smarter_csv gem,上载带有输入的文件),mysql,ruby-on-rails,unicode,utf-8,smartercsv,Mysql,Ruby On Rails,Unicode,Utf 8,Smartercsv,我正在尝试将包含unicode字符的csv信息保存到Rails应用程序上的mysql中 代码错误显示: ImporterController#上载中的类型错误 没有将字符串隐式转换为哈希值 问题就在这一行 编辑 这是日志 2018年2月14日17:46:31+0100时,127.0.0.1开始发布“/importer/upload” 由ImporterController处理#以HTML形式上载 参数:{“utf8”=>“✓", "真实性令牌“=>”rnz9HzM4aKALO2By3YtSbAD

我正在尝试将包含unicode字符的csv信息保存到Rails应用程序上的mysql中

代码错误显示:

ImporterController#上载中的类型错误 没有将字符串隐式转换为哈希值

问题就在这一行

编辑 这是日志

2018年2月14日17:46:31+0100时,127.0.0.1开始发布“/importer/upload” 由ImporterController处理#以HTML形式上载 参数:{“utf8”=>“✓", "真实性令牌“=>”rnz9HzM4aKALO2By3YtSbADmdAEhW4C+iv+9XAB3JArI/B8DAYkGdrJDULCA20p+Hx2APP4yErP9YSycsGfxdA==”,“csv”=>,“提交”=>“上传”} 在1ms内完成500个内部服务器错误(ActiveRecord:0.0ms) TypeError(没有将字符串隐式转换为哈希): app/controllers/concerns/character_mock.rb:46:in'import_create' app/controllers/importer\u controller.rb:6:在“上传”中 Rendering/home/marcos/.rvm/gems/ruby-2.4。0@hbo/rescues/layout中的gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb
已解决

最后,需要修改MySQL上的表以使用utf8mb4,而不仅仅是utf8,然后:

File.open(params[:csv].tempfile, "r:bom|utf-8") do |csv|
 chars = SmarterCSV.process(csv);
  chars.each do |char|
   #Then this will work
   Register.create(name: char[:name])
  end
 end
end
您还可以尝试注册。创建(名称:char[:name]。强制编码(“UTF-8”)


似乎MySQL上的错误导致了此类问题。

日志是什么?哈希在哪里起作用?请提供
SHOW CREATE TABLE
和生成的SQL语句。
Started POST "/importer/upload" for 127.0.0.1 at 2018-02-14 17:46:31 +0100
Processing by ImporterController#upload as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"rnz9HzM4aKALO2By3YtSbADmdAEhW4C+iv+9XAB3JArI/B8DAYkGdrJDULCA20p+Hx2APP4yErP9YSycsGfxdA==", "csv"=>#<ActionDispatch::Http::UploadedFile:0x007fd80801c1f0 @tempfile=#<Tempfile:/tmp/RackMultipart20180214-26318-zurnez.csv>, @original_filename="got_characters.csv", @content_type="text/csv", @headers="Content-Disposition: form-data; name=\"csv\"; filename=\"got_characters.csv\"\r\nContent-Type: text/csv\r\n">, "commit"=>"Upload"}
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms)



TypeError (no implicit conversion of String into Hash):

app/controllers/concerns/character_mock.rb:46:in `import_create'
app/controllers/importer_controller.rb:6:in `upload'
  Rendering /home/marcos/.rvm/gems/ruby-2.4.0@hbo/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
File.open(params[:csv].tempfile, "r:bom|utf-8") do |csv|
 chars = SmarterCSV.process(csv);
  chars.each do |char|
   #Then this will work
   Register.create(name: char[:name])
  end
 end
end