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