gpt4 book ai didi

mysql - Rails项目中如何将编码为utf8的Mysql转成utf8mb4

转载 作者:可可西里 更新时间:2023-11-01 07:09:45 24 4
gpt4 key购买 nike

我有一个使用 Mysql 5.5.34 和 utf8 编码的 Rails 3.2 项目。现在我发现使用utf8编码的Mysql无法保存代表emoji的unicode字符。

那么我可以将整个数据库转换为使用我在网上找到的可以容纳 4 字节 unicode 的 utf8mb4 编码吗?

utf8mb4 编码是否涵盖了我在数据库中的所有信息?如果这样做,我会面临数据丢失吗?

Rails 有什么方法可以做到这一点吗?

非常感谢您的帮助。

最佳答案

其实你只需要迁移你想用utf8mb4编码的列。

execute("ALTER TABLE yourtablename MODIFY yourcolumnname TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;")

如果您打算自己迁移数据,这可能是不可能的,因为常见的 utf8 由 3 个字节的字符组成,而 utf8mb4 由 4 个字节组成。所以您的数据库中可能已经有损坏的数据。

此外,Rails 3.2 在 ActiveSupports JSON 编码中存在编码问题。如果您计划使用 json 和 emojis,您将需要添加如下补丁(基于 rails 4 https://github.com/rails/rails/blob/4-0-stable/activesupport/lib/active_support/json/encoding.rb 中的解决方案)或简单地升级到 rails 4。

module ActiveSupport
module JSON
module Encoding
class << self
def escape(string)
if string.respond_to?(:force_encoding)
string = string.encode(::Encoding::UTF_8, :undef => :replace).force_encoding(::Encoding::BINARY)
end
json = string.gsub(escape_regex) { |s| ESCAPED_CHARS[s] }
json = %("#{json}")
json.force_encoding(::Encoding::UTF_8) if json.respond_to?(:force_encoding)
json
end
end
end
end
end

关于mysql - Rails项目中如何将编码为utf8的Mysql转成utf8mb4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20465788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com