我有一个使用Rails 4、MySql 5.1和gem mysql2的项目。
这一堆直到今天都运转良好。我在一个表中添加了两个字段(添加了相应的迁移),如果我将数据保存到表中,此字段中的数据将看起来很难看,例如-%D0%9D%D0%BE%D0%B4%D0%B0%D1%80%D0%B8
这是Rails日志:
这是请求中的数据。一切看起来都很好,“name”和“comment”都是俄语的。

Parameters: {"{\"user_id\":\"1\",\"name\":\"АБВ\",\"email\":\"[email protected]\",\"answer\":\"5\",\"comment\":\"цувцув\"}"=>nil}

但在SQL语句中,“name”参数已更改:
SQL (23.3ms) INSERT INTO "feedbacks" ("answer", "code", "comment", "created_at", "email", "name", "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id" [["answer", 5], ["code", 1], ["comment", "цувцув"], ["created_at", "2015-05-13 08:54:22.047321"], ["email", "[email protected]"], ["name", **"%D0%90%D0%91%D0%92"**], ["updated_at", "2015-05-13 08:54:22.047321"], ["user_id", "1"]]

“comment”字段是在迁移之前添加的,它按预期工作。在数据库和应用程序中看起来很棒。
“name”字段最近已添加,其工作方式与预期不同。
有人能帮忙解决这个问题吗?

最佳答案

您显示的字符串是在URI.encode上使用"АБВ"的结果-请参见:

[4] pry(main)> URI.encode "АБВ"
=> "%D0%90%D0%91%D0%92"

Rails本身不会这样做。您必须在执行转换的其他地方(或者希望不是gem)有一些代码。
如果您不知道它在哪里,请添加控制器中显示任何before_action方法或其他转换的代码。如果您正在执行任何before_save或任何自定义属性设置器(例如def name=

关于mysql - Rails4,MySql,mysql2编码问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30219239/

10-12 17:43