Как вы передаете параметр в запрос MySQL в задаче рейка rails? - PullRequest
0 голосов
/ 26 апреля 2018

Я изменяю кодировку всех моих таблиц с latin1 на utf8mb4, используя задачу raike rake.

Я хочу:

  1. Захватить все таблицы, где НЕ используется кодировка utf8mb4
  2. Изменить набор символов для каждой из этих таблиц.

Я могу захватить все таблицы, которые имеют неправильное окончание с

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 голосов
/ 26 апреля 2018

Каждый результат представляет собой массив:

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
...