如何在rails rake任务中将参数传递给mysql查询?

时间:2018-04-25 22:39:35

标签: mysql ruby-on-rails rails-activerecord

我正在使用rails rake任务将所有表格的编码从latin1更改为utf8mb4

我想:

  1. 抓取编码不是utf8mb4
  2. 的所有表格
  3. 更改每个表的字符集。
  4. 我可以使用

    抓取所有包含错误的表格
    results = ActiveRecord::Base.connection.execute <<-STRING
       SHOW TABLE STATUS WHERE collation <> 'utf8mb4'
    STRING
    

    我坚持如何将每个表的table name传递给mysql查询,以便可以更改表编码。

    results.each do |table|
      ActiveRecord::Base.connection.execute <<-STRING
      ALTER TABLE #{table.table_name} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
      STRING
    end
    

1 个答案:

答案 0 :(得分:0)

每个结果都是一个数组:

results.first.class
 => Array

SHOW TABLE STATUS返回的第一个值是表名。所以你应该可以使用类似的东西:

results.each do |table|
  ActiveRecord::Base.connection.execute <<-STRING
  ALTER TABLE #{table[0]} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
  STRING
end