【发布时间】:2013-12-28 14:03:31
【问题描述】:
我正在尝试在 Vagrant box following the instructions here 上设置 CartoDB。但是,它一直失败,因为它抱怨 Postgres 安装了 Latin-1 编码。
我不知道为什么 Postgres 会这样做,因为我明确地将所有本地设置强制为 UTF8。这是我一直在做的事情:
export LANGUAGE="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
locale
sudo apt-get update
sudo apt-get install -y python-software-properties
sudo add-apt-repository -y ppa:cartodb/gis
sudo add-apt-repository -y ppa:mapnik/v2.1.0
sudo add-apt-repository -y ppa:cartodb/nodejs
sudo add-apt-repository -y ppa:cartodb/redis
sudo add-apt-repository -y ppa:cartodb/postgresql
sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable
sudo apt-get update
sudo apt-get install -y make unp zip libgeos-c1 libgeos-dev gdal-bin libgdal1-dev libjson0
sudo apt-get install python-simplejson libjson0-dev proj-bin proj-data libproj-dev postgresql-9.1
这里是早期locale的输出,说明UTF8设置成功:
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
运行上述所有命令后,当我检查 Postgres 的状态时,似乎 Postgres 仍然安装了 Latin-1 编码:
sudo -u postgres psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres | postgres | LATIN1 | en_US | en_US |
template0 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
为什么会这样?如何强制 Postgres 使用 UTF8 编码自行安装?
【问题讨论】:
-
同样,在我的 Vagrantfile 中,我有
sudo update-locale LANG=en_NZ.UTF-8 LC_ALL=en_NZ.UTF-8将 LANG 和 LC_* 设置为 'en_NZ.UTF-8' 但是当我在此之后安装 postgresql 包时,数据库显示为 LATIN1/en_US跨度>
标签: postgresql encoding vagrant