我通过以下命令创建了数据库:
CREATE DATABASE myendb
ENCODING 'UTF-8'
LC_COLLATE 'en_US.UTF-8'
LC_CTYPE 'en_US.UTF-8'
TEMPLATE template0;
我尝试通过调用 PQputCopy..() 函数按照复制命令将 UTF8 编码的西里尔字母插入表中,但出现以下错误:
COPY my_table_name(columns list)
FROM STDIN WITH CSV DELIMITER AS ';' NULL AS E'' QUOTE '"' failed.
EOF:0 Message:ERROR: value too long for type character(15)
我尝试将“ENCODING UTF8”添加到cmd中,我收到另一个错误:
COPY my_table_name(columns list)
FROM STDIN WITH CSV DELIMITER AS ';' NULL AS E'' QUOTE '"' ENCODING 'UTF8' failed.
EOF:0 Message:ERROR: character with byte sequence 0xd0 0xbb in encoding "UTF8" has no equivalent in encoding "WIN1252"
我通过UTF8加载西里尔文句子编码。该数据库也是使用 UTF8 编码创建的。字符集也设置为UTF8。我使用 libpq 来连接并执行复制命令。哪里没有WIN1252... 我还尝试添加 'set client_encoding='utf8'' - 它没有帮助。 我不知道如何解决这个问题... 谢谢您的帮助!
我在一台服务器上有多个数据库。我使用 PQconnectdb() 连接一些适当的数据库,例如 myendb,但 libpq 连接到默认数据库,例如 postgres。该 postgres 数据库的编码与 myendb 不同。因此我得到了上限错误。
当我尝试使用 PQsetdbLogin() 函数连接到 myendb 数据库后,libpq 连接到 myendb 数据库并成功执行复制命令。
PQconnectdb 和 PQsetdbLogin 有区别。虽然对于 PQconnectd() 函数我设置了 dbname=myendb,但 libpq 连接到 postgres。这很奇怪...我的postgresql版本是12.17.