从 postgres 选择后 UTF8 字符不正确

我在 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 隐藏了电子邮件的其余部分)。

这是一个错误,还是我误会了什么?


犯罪嫌疑人X
浏览 115回答 1
1回答

烙印99

确保您的数据库已针对 UTF8 正确设置。区域设置在创建数据库时是固定的,可能会导致 sql 函数出现问题,例如LOWER. pg_dropcluster使用和重新创建数据库pg_createcluster --encoding=UTF8。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go