在 PostgreSQL 和 Ruby Object Mapper 中使用 UTF-8 字符的正确方法是什么?

What is the correct way to use UTF-8 characters with PostgreSQL and Ruby Object Mapper?

我在黑暗中尝试过很多次随机拍摄,例如:

  config.gateways[:default] = [:sql, database_url, encoding: 'UTF8']

以及 UTF8 的所有变体,例如 utf8、utf-8、unicode、Unicode。

但是当我给 ROM 插入非 ASCII、UTF-8 字符时,这些字符在到达 PostgreSQL 的过程中会被替换为“�”。

设置 ROM 并将其用于 UTF-8 字符的正确方法是什么?

嗯,我们直接将连接选项传递给 Sequel,然后如果您在连接配置选项中指定编码:utf-8 它将起作用

ROM::Configuration.new(:sql, "postgres://...", { encoding: utf-8 })

require 'rom'
require 'rom-sql'

DATABASE_URL = ENV.fetch('DATABASE_URL', 'postgres://localhost/rom')
setup = ROM::Configuration.new(:sql, DATABASE_URL, encoding: 'unicode')
rom = ROM.container(setup)

conn = setup.default.connection
conn.drop_table?(:users)
conn.create_table :users do
  String :name
end

class Users < ROM::Relation[:sql]
end

setup.register_relation(:users)

rom.relations.users.insert(:name => "Pöter")

p rom.relations.users.to_a