У меня есть таблица базы данных в postgres, содержащая адреса электронной почты. У одного из клиентов есть умлаут (ü) в адресе электронной почты. Это не должно быть проблемой, но каким-то образом строка в go содержит неправильную последовательность байтов (это E3BC вместо C3BC), что позже доставляет мне кучу проблем.
Я подключаюсь к базе данных с помощью client_encoding=UTF8
, и база данных настроена для UTF8. Если я выполню следующее, я увижу, что последовательность байтов в базе данных соответствует ожидаемой:
SELECT encode("email"::bytea, 'hex') FROM participants WHERE email like 'XXXXXX%';
encode
----------------------------------------------
c3bc
(остальные данные скрыты)
Я читаю данные, используя пакет database/sql и драйвер postgres, и если я печатаю строку в go, я получаю XXXXXXe3bcXXXXXX, чего я не ожидал (опять же, скрывая остальную часть электронной почты с помощью X).
Это баг, или я что-то не понимаю?
Убедитесь, что ваша база данных правильно настроена для UTF8. Настройки локали фиксируются при создании базы данных и могут вызывать проблемы с функциями sql, такими как LOWER
. Повторно создайте базу данных с помощью pg_dropcluster
и pg_createcluster --encoding=UTF8
.