Postgresql 编码UTF-8的字符0xe2809a在“中没有等效项”;拉丁语9“;迁移到UTF8后

Postgresql 编码UTF-8的字符0xe2809a在“中没有等效项”;拉丁语9“;迁移到UTF8后,postgresql,utf-8,character-encoding,psql,Postgresql,Utf 8,Character Encoding,Psql,最近,我们将一个数据库从SQL\U ASCII迁移到UTF8编码。运行应用程序后,我们开始收到如下错误消息 编码UTF-8的字符0xc296在“WIN1252”中没有等效项 所以我们遇到了iconv和 转换是在以下步骤中完成的 1-将现有数据库转储为 使用[b]iconv[/b]进行2-转换 3创建一个nerw UTF编码的数据库 4从步骤2中导入sql 我们排除了错误,但是 在另一个系统上,我们得到 编码UTF-8的字符0xe2809a在“LATIN9”中不等效 迁移到UTF8后出现问题 因此

最近,我们将一个数据库从SQL\U ASCII迁移到UTF8编码。运行应用程序后,我们开始收到如下错误消息

编码UTF-8的字符0xc296在“WIN1252”中没有等效项

所以我们遇到了iconv和 转换是在以下步骤中完成的

1-将现有数据库转储为 使用[b]iconv[/b]进行2-转换 3创建一个nerw UTF编码的数据库 4从步骤2中导入sql 我们排除了错误,但是

在另一个系统上,我们得到

编码UTF-8的字符0xe2809a在“LATIN9”中不等效 迁移到UTF8后出现问题

因此,我们尝试了以上相同的步骤和不同的转换 像这样

"C:\Program Files\GnuWin32\bin\iconv.exe"  -c  -f ISO-8859-15 -t UTF-8  C:\UTF8Dump.sql>C:\ConvertedUTF8Dump.sql
但这个错误仍然存在

编码UTF-8的字符0xe2809a在“LATIN9”中没有等价物 迁移到UTF8后出现问题

有什么想法吗?

您确定源数据库是
SQL\u ASCII

数据库中的文本实际上是什么编码?你有可能混合了几种不同的编码吗?这在没有执行任何合理编码规则的DBs中并不少见

utf-8
中的
0xc296
是。这似乎是一个相当荒谬的字符,来自windows-1252源代码的转换

utf-8中的
0xe2809a
。它在ISO-8859-15中无效,因此PostgreSQL在此正确地生成了一个错误

我想说,您的数据库中可能有多个相互不兼容的编码字符串,因此没有一个转换应用于整个数据库。欢迎来到从混合编码的不匹配迁移到严格的utf-8环境的乐趣


或者,如果您确实知道数据库的编码是什么并且知道它是一致的,那么您可以尝试使用
pg_dump
而不使用
--encoding
iconv
数据库,然后编辑转储并添加/更改
SET client_encoding
语句以反映新的编码。如果您在
iconv
之后没有在转储中更改
SET client\u encoding
,这可能很好地解释了问题,因为您会告诉Pg将转换为
utf-8
的数据解释为
拉丁语-9
或其他任何形式。

+1,hi\35; 1]
您确定源数据库是SQL\u ASCII吗?
-是#2-它是混合的(英语、西班牙语不确定所有语言),但混合#3.
欢迎来到从一个不匹配的系统迁移的喜悦中
;(..#4
您可以尝试不使用--encoding的pg#u转储…
是的,我会尝试这个。@psqluser如果它是一个混合编码的数据库,您不能只将整个转储文件
iconv
转换为utf-8。您需要逐个字段转换。PostgreSQL
convert
convert\u from
函数与PL/PgSQL一起可能很有用
异常
子句。@psqluser有关混合编码的信息,请参阅
 "C:\Program Files\GnuWin32\bin\iconv.exe"  -c  -f windows-1252 -t UTF-8 C:\UTF8Dump.sql>C:\ConvertedUTF8Dump.sql
"C:\Program Files\GnuWin32\bin\iconv.exe"  -c  -f ISO-8859-15 -t UTF-8  C:\UTF8Dump.sql>C:\ConvertedUTF8Dump.sql