在 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。
- 我尝试将 shell 环境的 LC_CTYPE 设置为 UTF8。
- 我试过在连接 URL 上设置 client_encoding 参数。
- 我已验证数据库的编码为 UTF8,即
SHOW server_encoding
。
- 我已经验证 ROM 的 Sequel 连接报告客户端编码为
实际使用前的 UTF8,即
SHOW client_encoding
;
- 我已经验证我可以使用 psql 在同一个数据库中插入和读回 UTF-8 字符。
- 我已经验证我可以使用 Rails' ActiveRecord 在同一个数据库中插入和读回 UTF-8 字符。
但是当我给 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
我在黑暗中尝试过很多次随机拍摄,例如:
config.gateways[:default] = [:sql, database_url, encoding: 'UTF8']
以及 UTF8 的所有变体,例如 utf8、utf-8、unicode、Unicode。
- 我尝试将 shell 环境的 LC_CTYPE 设置为 UTF8。
- 我试过在连接 URL 上设置 client_encoding 参数。
- 我已验证数据库的编码为 UTF8,即
SHOW server_encoding
。 - 我已经验证 ROM 的 Sequel 连接报告客户端编码为
实际使用前的 UTF8,即
SHOW client_encoding
; - 我已经验证我可以使用 psql 在同一个数据库中插入和读回 UTF-8 字符。
- 我已经验证我可以使用 Rails' ActiveRecord 在同一个数据库中插入和读回 UTF-8 字符。
但是当我给 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