Я меняю кодировку всех моих таблиц с latin1
на utf8mb4
используя задачу rails rake.
Я бы хотел:
Я могу захватить все таблицы, которые неправильно вписываются в
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
Каждый результат представляет собой массив:
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