"XL" } JSON: "{\"Gr\\u00f6\\u00dfe\":\"XL\"-6ren">
gpt4 book ai didi

ruby-on-rails-3 - 保存到数据库时 JSON 中的多字节字符丢失

转载 作者:行者123 更新时间:2023-12-01 06:39:19 25 4
gpt4 key购买 nike

我使用 Rails 的 .to_json() 方法将我的哈希转换为 JSON。

哈希:

{ "Größe" => "XL" }

JSON:
"{\"Gr\\u00f6\\u00dfe\":\"XL\"}"

之后,JSON 字符串存储在名为 的 hstore (Postgres) 列中。静态 通过这个 Rails (3.2.6) SQL 命令:
UPDATE ... "static" = 'options=>"{\"Gr\u00f6\u00dfe\":\"XL\"}"' WHERE ...

已经缺少一个转义反斜杠。

在数据库本身中 静态 列看起来像这样:
"options"=>"{\"Gru00f6u00dfe\":\"XL\"}"

的所有反斜杠u00f6 u00dfe 已经走了。

JSON.parse() 不再识别多字节字符,因此它返回以下哈希:
{ "Gru00f6u00dfe" => "XL" }

有谁知道如何防止这种情况?谢谢你的帮助!

最佳答案

开箱即用,rails 不支持 PostgreSQL 的 hstore。但修复很容易,只需使用 activerecord-postgres-hstore gem 。使用 activerecord-postgres-hstore将使您摆脱序列化或编码问题。这是如何

1)安装gem然后将静态列类型更改为hstore

class ChangeHStoreDateTypeInMyTable < ActiveRecord::Migration
def change
change_column :my_table, :static, :hstore
end

2) 添加索引
CREATE INDEX my_table_gin_static ON my_table USING GIN(static);

3) 现在,您可以像往常一样实例化模型实体并更新值,而无需担心序列化或编码。
@model.static["Größe"] = "XL"

更多信息: https://github.com/softa/activerecord-postgres-hstore

关于ruby-on-rails-3 - 保存到数据库时 JSON 中的多字节字符丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12344715/

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