in Hacking

Emoticons in Rails Database

To support emoticons in a MySQL database you must use the utf8mb4 character set.
This isn't a rails default.
To make sure the database uses the correct format I use the following migration to change the default charcter set

class InitDatabase < ActiveRecord::Migration[5.2]
  def up
    execute "ALTER DATABASE `#{connection.current_database}` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
  end
end

More info about the reason why I choose to use utf8mb4_unicode_ci as collection
https://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci/766996#766996

And force rails in using max string length of 191 which is required for the keylength of 767.
You can add the following monkey patch to the initializer

# config/initializers/monkey_patch_mysql_utf8mb4.rb
require 'active_record/connection_adapters/abstract_mysql_adapter'

module ActiveRecord
  module ConnectionAdapters
    class AbstractMysqlAdapter
      NATIVE_DATABASE_TYPES[:string] = { name: "varchar", limit: 191 }
    end
  end
end
  • Related Content by Tag