Character encoding 创建/还原数据库时的Postgres编码问题
我正试图从我的客户以前的软件供应商提供给我的备份中创建一个Postgres数据库(图中已不再显示),但我正在努力解决编码问题。我不太熟悉Postgres(MySQL是我的东西),所以请原谅我的N00B 当我运行Character encoding 创建/还原数据库时的Postgres编码问题,character-encoding,postgresql-9.3,Character Encoding,Postgresql 9.3,我正试图从我的客户以前的软件供应商提供给我的备份中创建一个Postgres数据库(图中已不再显示),但我正在努力解决编码问题。我不太熟悉Postgres(MySQL是我的东西),所以请原谅我的N00B 当我运行psql dbname
psql dbname
时,它会弹出各种各样的行,以无效命令开始,以问号和奇怪字符字符串结束,最后一行输出是:
ERROR: invalid byte sequence for encoding "UTF8": 0xf1 0x16 0x88 0x02
我在终端中打开了备份文件,看到许多SQL字符串中夹杂着不可打印的字符(表示为“^@”)。我认为顶部有一些字符串可能与此相关:
SET client_encoding = 'UTF8';
SET standard_conforming_strings = 'off';
CREATE DATABASE "cleaned_DB" WITH TEMPLATE = template0 ENCODING = 'UTF8' \
LC_COLLATE = 'English_United States.1252' \
LC_CTYPE = 'English_United States.1252';
所以看起来数据库使用的是UTF8编码,但软件供应商的开发机器使用的是WIN1252。我猜备份文件中的字符串在WIN1252中
如何导入此数据库?作为参考,我的开发机器正在运行Mac OSX。备份是“自定义格式”备份,而不是SQL脚本。您可以使用pg_restore
命令将其还原。看
编码问题将是一个更大的问题。使用PostgreSQL在Windows和Linux之间使用区域设置和编码的情况非常糟糕pg_restore
如果被告知在还原过程中创建DB,则很可能无法创建DB,因为Mac OS X上不存在ctypeEnglish_United States.1252
,它是Windows ism
我认为您需要做的是创建数据库
使用相应的LC\u CTYPE
和LC\u COLLATE
创建数据库,如en\u US.utf-8
。然后恢复到现有数据库