Ruby Rails - 表情符号未保存在 MySQL
Ruby on Rails - Emoji not saved in MySQL
我正在开发一个 Rails 应用程序,用户可以在其中将照片上传到他们的个人资料。每张照片都有一个标题,应该支持表情符号。尽管将 table 的编码更改为 utf8mb4 并修改了 database.yml 当我尝试保存带有表情符号的照片时标题 MySQL returns 错误 'incorrect string value'.
该应用正在 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
database.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
尝试将 table 的排序规则设置为 utf8mb4_bin
而不是 utf8mb4_unicode_ci
:
ALTER TABLE user_photos CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
并更改 collation
属性 database.yml
中的值
我正在开发一个 Rails 应用程序,用户可以在其中将照片上传到他们的个人资料。每张照片都有一个标题,应该支持表情符号。尽管将 table 的编码更改为 utf8mb4 并修改了 database.yml 当我尝试保存带有表情符号的照片时标题 MySQL returns 错误 'incorrect string value'.
该应用正在 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
database.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
尝试将 table 的排序规则设置为 utf8mb4_bin
而不是 utf8mb4_unicode_ci
:
ALTER TABLE user_photos CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
并更改 collation
属性 database.yml