从PG8升级到PG9时编码“UTF8”的字节序列无效

时间:2014-02-20 06:30:31

标签: postgresql activerecord utf-8

我们的数据库将从postgresql 8.4升级到9.3,我们被要求对我们的遗留应用程序(Rails 2.3.2应用程序)进行一些验证。 (不要笑,这是一个真正的应用程序,运行多年)。 我使用最新的pg gem(0.17.1),但是对于rails来说最新的2.3.18是非常大的变化,所以我只使用旧的rails版本。

一个表存储一些二进制数据(列类型为bytea)。

问题出现了: 当我作为后端数据库运行8.4时,该表可以插入记录。 当我作为后端数据库运行9.3时,rails应用程序因“编码无效字节序列”UTF8而感到恐惧......“

pg8 / 9中的db都是以UTF8编码构建的。应用程序代码相同。

我可以观察到生成的SQL(在test.log中记录)是不同的: 对于8.4:

INSERT INTO "large_keys" ("u_id", "key_value", "key_hash", "created_at", "type", 
"iv")     VALUES(793287954, E'\\3540\\272\\204\\327H\\204w\\021\\341\\362I\\205\\3456\\252', 
NULL, '2014-02-20 10:32:00.869783', E'aes', E'aaabbbcccddd1234’);

但是9.3:

INSERT INTO "large_keys" ("type", "iv", "key_value", "created_at", "u_id", "key_hash") 
VALUES(E'aes', E'aaabbbcccddd1234', E'\3540\272\204\327H\204w\021\341\362I\205\3456\252', 
'2014-02-20 10:33:46.659190', 793287954, NULL);

主要的不同是key_value在谈话时正确转义了8.4。但是我不明白哪个原因使得前端的主动记录表现不同?

提前感谢任何想法。

0 个答案:

没有答案