我正在使用PostgreSQL 9.1。尝试将UTF8编码强制为默认值。
这就是我在做的事。
service postgresql initdb -E 'UTF-8' --lc-collate='en_US.UTF-8' --lc-ctype=locale='en_US.UTF-8';
虽然启动过程没有任何问题,但
\l
提示符下的psql
会提供详细信息。
List of databases
Name | Owner |Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres | postgres | LATIN1 | en_US | en_US|
为什么UTF-8
编码没有得到强制执行?
答案 0 :(得分:11)
看起来您正在通过操作系统的运行级别脚本调用initdb。此脚本可能不会传递参数。您最好直接尝试执行initdb,您需要以root身份执行以下步骤,并假设数据库的OS用户帐户是postgres。
mkdir <your data dir>
chown postgres <your data dir>
su postgres
initdb --pgdata=<your data dir> -E 'UTF-8' --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8'
答案 1 :(得分:1)
Debian PostgreSQL安装会自动调用initdb,即它使用默认编码和语言环境初始化集群。编码可以在以后更改,但区域设置不能。要更改语言环境(initdb中可能的其他选项),请删除现有的默认群集并创建一个新群集:
Take root privileges.
Run the following command:
pg_dropcluster --stop <version> main
For example:
pg_dropcluster --stop 8.3 main
Run the initdb with your options. For example:
pg_createcluster --locale de_DE.UTF-8 --start 8.3 main
警告!
以前的操作显然会删除群集数据库中的所有内容。安装基础软件包后立即执行此操作。如果需要更改现有数据库的区域设置,请查看PostgreSQL手册(这不是一个简单的操作)。