Как правильно использовать символы UTF-8 с PostgreSQL и Ruby Object Mapper?

Я пробовал много случайных снимков в темноте, таких как:

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

И все варианты UTF8, например, utf8, utf-8, Unicode, Unicode.

  • Я попытался установить LC_CTYPE оболочки env в UTF8.
  • Я попытался установить параметр client_encoding в URL-адресе соединения.
  • Я проверил, что база данных имеет кодировку UTF8, т.е. SHOW server_encoding,
  • Я проверил, что соединение Sequel ROM сообщает клиентскую кодировку UTF8 непосредственно перед фактическим использованием, то есть SHOW client_encoding;
  • Я проверил, что могу вставлять и читать символы UTF-8 в одной базе данных с помощью psql.
  • Я подтвердил, что могу вставлять и считывать символы UTF-8 с одной и той же базой данных, используя RailR 'ActiveRecord.

Но когда я даю ПЗУ не-ASCII, UTF-8 символы для вставки, символы заменяются на ' ' где-то на пути к PostgreSQL.

Как правильно настроить ПЗУ и использовать его с символами UTF-8?

1 ответ

Решение

Хм, мы передаем параметры подключения прямо в 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
Другие вопросы по тегам