我在postgres中有一个包含电子邮件地址的数据库表。其中一个客户的电子邮件地址中有一个变音符号(ü)。这本不应该是一个问题,但不知何故,go中的字符串包含了错误的字节序列(它是E3 BC而不是C3 BC),这给我带来了一系列问题。
我使用client_encoding=UTF8
连接到数据库,数据库设置为UTF8。如果运行以下命令,我可以看到数据库中的字节序列与预期一致:
SELECT encode("email"::bytea, 'hex') FROM participants WHERE email like 'XXXXXX%';
encode
----------------------------------------------
c3bc
(the其余数据已隐藏)
我使用数据库/sql包和postgres驱动程序读取数据,如果我在go中打印字符串,我会得到XXXXXXe 3bcXXXXXX,这不是我所期望的(同样,用X隐藏电子邮件的其余部分)。
这是一个错误,还是我误解了什么?
1条答案
按热度按时间zf9nrax11#
请确保数据库已正确设置为UTF8。区域设置在创建数据库时已修复,可能会导致
LOWER
等SQL函数出现问题。请使用pg_dropcluster
和pg_createcluster --encoding=UTF8
重新创建数据库。