我需要将 PostgreSql 数据库从 8.3 Windows 移动到在 Linux(Ubuntu Server 12.04)上运行的 8.4。
恢复显然是可以的,但是当我尝试在我的程序中显示数据时,我收到一条错误消息,说 WIN1252 编码不支持某些字符。
原始数据库具有以下属性:
编码:WIN1252 LC_CTYPE:English_United States.1252 LC_COLLATE:English_United States.1252
我可以使用 LC_CTYPE = "C" 和 LC_COLLATE = "C" 来恢复数据库,这样我就可以在我的程序中获得不支持的字符。
如果我尝试使用此命令创建数据库:
createdb -h 127.0.0.1 \
--encoding=WIN1252 \
--lc-ctype='English_United States.1252' \
--lc-collate='English_United States.1252' \
-T template0 -U postgres mydb
我收到此错误:
createdb: falló la creación de la base de datos:
ERROR: el nombre de configuración regional «English_United States.1252» no es válido
首先,我怎样才能让我的操作系统包含这个区域配置?
Windows-1252 字符集在 Ubuntu 中以它的另一个名称而闻名
CP1252
。通常在 Ubuntu 上默认没有安装相应的语言环境,因为 Unix 人更
iso-8859-15
喜欢utf-8
.但是,charmap 应该由
locales
软件包提供。假设安装了这个包,你可以发出这样的命令来创建相关的语言环境:然后运行
sudo /etc/init.d/postgresql restart
postgres 以选择新的语言环境,避免Ubuntu 12.04 上的 Postgresql 9.2 “invalid locale name”。然后你应该能够
createdb
像你在问题中一样运行,除了区域设置名称而en_US.CP1252
不是 Windows-ishEnglish_United States.1252