【发布时间】:2017-11-21 17:38:40
【问题描述】:
我有一个 utf8mb4 字符需要保存在 MySQL 的列中。所有解决方案都指向删除 4 字节字符或更改表的排序规则或字符集。
我还注意到 Rails(ActiveRecord) 安全转换了????到 \U0001F4A1 并将其存储在数据库中。我想知道 ActiveRecord 是如何做到的以及我该如何做到这一点
【问题讨论】:
标签: mysql ruby-on-rails ruby utf8mb4
我有一个 utf8mb4 字符需要保存在 MySQL 的列中。所有解决方案都指向删除 4 字节字符或更改表的排序规则或字符集。
我还注意到 Rails(ActiveRecord) 安全转换了????到 \U0001F4A1 并将其存储在数据库中。我想知道 ActiveRecord 是如何做到的以及我该如何做到这一点
【问题讨论】:
标签: mysql ruby-on-rails ruby utf8mb4
简短回答: 你不能这样做。如果要在 mysql 中保存 4 字节字符,则需要使用 UTF8mb4
更长的答案: 以一种 hacky 的方式,您可以通过序列化来保存这样的字符。假设您的模型是 Foo 并且您保存 4 字节字符的列是 bar,您将有类似的内容:
class Foo < ActiveRecord::Base
serialize :bar
end
不过,这是 hack。它会起作用,但您需要序列化所有其他现有记录(否则您会自找麻烦)。
在尝试在旧版 UTF8 数据库上支持表情符号时,一直在尝试类似的想法,不幸的是,除了选择 UTF8mb4 之外,没有其他好的方法可以解决。
如果您只对处理表情符号感兴趣,另一种选择是使用 emojimmy 之类的东西
【讨论】: