Как правильно использовать символы 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