Saudações!
Desenvolvendo um aplicativo exemplo com Ruby on Rails deparei-me com a seguinte situação: Criei um model para representar os estados brasileiros e decidi em sua migration, além de criar a tabela com os atributos necessários, aproveitar e popular o banco com os estados brasileiros.
Meu arquivo ficou assim:
def self.up
create_table :states do |t|
t.string :name, :nil => false, :limit => 255
t.string :acronym, :nil => false, :limit => 2
t.timestamps
end
State.create(:name => "Amazonas", :acronym => "AM")
State.create(:name => "Amapá", :acronym => "AP")
State.create(:name => "Bahia", :acronym => "BA")
State.create(:name => "São Paulo", :acronym => "SP")
State.create(:name => "Rio de Janeiro", :acronym => "RJ")
State.create(:name => "Espírito Santo", :acronym => "ES")
State.create(:name => "Minas Gerais", :acronym => "MG")
State.create(:name => "Sergipe", :acronym => "SE")
State.create(:name => "Alagoas", :acronym => "AL")
State.create(:name => "Pernambuco", :acronym => "PE")
State.create(:name => "Paraíba", :acronym => "PB")
State.create(:name => "Rio Grande do Norte", :acronym => "RN")
State.create(:name => "Maranhão", :acronym => "MA")
State.create(:name => "Ceará", :acronym => "CE")
State.create(:name => "Piauí", :acronym => "PI")
State.create(:name => "Pará", :acronym => "PA")
State.create(:name => "Roraima", :acronym => "RR")
State.create(:name => "Rondonia", :acronym => "RO")
State.create(:name => "Mato Grosso do Sul", :acronym => "MS")
State.create(:name => "Mato Grosso", :acronym => "MT")
State.create(:name => "Goiás", :acronym => "GO")
State.create(:name => "Paraná", :acronym => "PR")
State.create(:name => "Santa Catarina", :acronym => "SC")
State.create(:name => "Rio Grande do Sul", :acronym => "RS")
State.create(:name => "Acre", :acronym => "AC")
end
def self.down
drop_table :states
end
end
Somente que, quando executei meu rake db:migrate fui apresentado ao seguinte erro:
db/migrate/20100930232925_create_states.rb:10: invalid multibyte char (US-ASCII)
Neste meu exemplo, utilizei o SQLite. Como a própria descrição do erro mostra (mensagens de erros com RoR são autoexplicativas em sua maior parte), há um erro na codificação do caracter que não está sendo interpretado corretamente pelo banco de dados.
Como solucionar?
Simples, basta no início do arquivo passarmos um comentário mágico (magic comment) que diz qual o tipo de codificação, que no nosso caso é o utf-8:
class CreateStates < ActiveRecord::Migration
def self.up
create_table :states do |t|
Resolvi utilizar o