11

我正在使用 PostgreSQL 9.1。尝试默认强制执行 UTF8 编码。

这就是我正在做的事情。

service postgresql initdb -E 'UTF-8' --lc-collate='en_US.UTF-8' --lc-ctype=locale='en_US.UTF-8';

虽然初始化过程没有任何问题,

a\lpsql提示符处提供了详细信息。

                         List of databases
   Name    |  Owner   |Encoding  | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
  postgres | postgres | LATIN1 | en_US | en_US| 

为什么UTF-8编码没有得到强制执行?

4

2 回答 2

14

看起来您正在通过操作系统的运行级别脚本调用 initdb。此脚本可能不会传递参数。您最好尝试直接执行 initdb,您需要以 root 身份开始执行以下步骤,并假设数据库的操作系统用户帐户是 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'
于 2012-08-05T08:10:46.640 回答
3

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 手册(这不是一个简单的操作)。

于 2015-10-31T04:38:41.750 回答