【问题标题】:Ruby 2.2: PG::CharacterNotInRepertoire: ERROR: invalid byte sequence for encoding "UTF8"Ruby 2.2:PG::CharacterNotInRepertoire:错误:编码“UTF8”的字节序列无效
【发布时间】:2015-01-01 11:19:39
【问题描述】:

我正在升级 Rails 4.1 应用程序以使用 Ruby 2.2。在升级过程中,发现该应用程序使用旧版本的 pg gem (0.12) 并且 gem 没有使用 Ruby 2.2 安装。所以我尝试使用更新版本的 pg gem (0.17.1)。现在在系统中创建新用户时有时会出现以下错误:

PG::CharacterNotInRepertoire:错误:编码“UTF8”的字节序列无效

Ruby 2.2 和 Postgres 是否存在任何已知问题?

看起来应用程序配置为使用 unicode:config.encoding = "utf-8" 在 application.rb 中设置,encoding: unicode 在 database.yml 中

SQL语句:

INSERT INTO "users" (
  "confirmation_sent_at", 
  "confirmation_token", 
  "created_at", 
  "email", 
  "encrypted_password", 
  "first_name", 
  "last_name", 
  "updated_at") 
  VALUES ($1, $2, $3, $4, $5, $6, $7, $8) 
  RETURNING "id"

【问题讨论】:

  • 我尝试使用 pg 0.17.1 和 ruby​​ 2.1.5 并且没有编码错误
  • @RustamA.Gasanov:这不是重复的,错误不是源于用户输入,在升级到 ruby​​ 2.2 之前也没有发生

标签: ruby-on-rails ruby postgresql


【解决方案1】:

看起来这是“pg”gem 的一个已知问题:https://bitbucket.org/ged/ruby-pg/issue/197/ruby-220-byte-encoding-issue

应该在 0.18 预发布版本中修复

【讨论】:

    【解决方案2】:

    Ruby 2.2.0 re UTF-8 encoding with Postgres 中肯定存在某种错误。我将以前没有错误的 Rails 4.1.5 应用程序从 Ruby 2.1.5 升级到 Ruby 2.2.0 并开始在开发和开发中的用户输入电子邮件字段上出现这些错误“PG::CharacterNotInRepertoire: ERROR: invalid byte sequence for encoding UTF8”在 Heroku 上的暂存环境中。降级到 Ruby 2.1.5 且没有其他更改完全解决了这个问题。

    更新:

    在本次更新中大打出手,但错误不在 Ruby 中,而是在 pg gem 中:https://github.com/ged/ruby-pg/pull/5

    【讨论】:

    • 是的,我也是。降级到 2.1.5
    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2022-01-26
    相关资源
    最近更新 更多