Как вы передаете параметр в запрос MySQL в задаче рейка rails?

0

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

Я бы хотел:

  1. Захватите все таблицы, где кодировка NOT 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
Теги:
rails-activerecord

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню