DATABASE = '' CHARACTER_SET = 'utf8' COLLATION = 'utf8_general_ci' schema = File.open('db/schema.rb', 'r').read rows = schema.split("\n") table_name = nil rows.each do |row| if row =~ /create_table/ table_name = row.match(/create_table "(.+)"/)[1] puts "ALTER TABLE `#{DATABASE}`.`#{table_name}` DEFAULT CHARACTER SET #{CHARACTER_SET} COLLATE #{COLLATION};" elsif row =~ /t\.string/ || row =~ /t\.text/ field_name = row.match(/"(.+?)"/)[1] row.match(/limit[:=> ]*(\d+)/) limit = ($1 || 255).to_i row.match(/default[:=> ]*"(.+?)"/) default = $1 && "DEFAULT '#{$1}'" || '' row.match(/null[:=> ]*(false)/) null = $1 && "NOT NULL" || '' if row =~ /t\.string/ type = "VARCHAR(#{limit})" elsif limit > 65535 type = "LONGTEXT" else type = "TEXT" end puts "ALTER TABLE `#{DATABASE}`.`#{table_name}` CHANGE COLUMN `#{field_name}` `#{field_name}` #{type} CHARACTER SET #{CHARACTER_SET} COLLATE #{COLLATION} #{null} #{default};" end end; 1