Postgresql 编码UTF-8的字符0xe2809a在“中没有等效项”;拉丁语9“;迁移到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后出现问题 因此,我们尝试了以上相同的步骤和不同的转换 像这样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后出现问题 因此
"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。您需要逐个字段转换。PostgreSQLconvert
和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