mysql - Ruby on Rails - 表情符号未保存在 MySQL 中

标签 mysql ruby-on-rails ruby emoji

我正在开发一个 Rails 应用程序,用户可以在其中将照片上传到他们的个人资料。每张照片都有一个标题,应该支持表情符号。尽管将表的编码更改为 utf8mb4 并修改了 database.yml 当我尝试保存标题中带有表情符号的照片时,MySQL 仍返回错误“不正确的字符串值”。

该应用在 Rails 5.0.0.1 和 Ruby 2.3.0 上运行,MySQL 在 5.7.16 版本上运行。

迁移文件:

class CreateUserPhotos < ActiveRecord::Migration[5.0]
  def change
    create_table :user_photos do |t|
      t.string  :title
      t.string  :filename, null: false
      t.integer :visibility, null: false, default: 0
      t.belongs_to :user, foreign_key: true, index: true

      t.timestamps
    end

    reversible do |dir|
      dir.up do
        execute "ALTER TABLE `user_photos` CHANGE `title` `title` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
      end

      dir.down do
        execute "ALTER TABLE `user_photos` CHANGE `title` `title` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;"
      end
    end
  end
end

数据库.yml文件:

production:
  adapter: mysql2
  encoding: utf8mb4
  reconnect: false
  database: app_db
  pool: 5
  username: app_user
  password: app_password
  host: localhost
  socket: /var/run/mysqld/mysqld.sock
  collation: utf8mb4_unicode_ci

最佳答案

尝试将表的排序规则设置为 utf8mb4_bin 而不是 utf8mb4_unicode_ci:

ALTER TABLE user_photos CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

同时更改 database.yml 中的 collat​​ion 属性值

关于mysql - Ruby on Rails - 表情符号未保存在 MySQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43117279/

相关文章:

ruby-on-rails - ActiveAdmin - 未初始化的常量 AdminUser

php - 为什么我会收到 SQL 语法错误?

mysql - Mysql子查询如何解决

php - Mysql 组查询错误

php - 级联表中的值

ruby-on-rails - 带有 Capybara have_css 匹配器的 Rspec 不起作用

ruby-on-rails - rails 3/postgres - 如果不应用 :limit in schema 字符串有多长

javascript - Morris.js 如何为特定类型创建图表

Ruby - 词法范围与继承

ruby - 在 Ruby 中减少/注入(inject)运算符