postgresql - 强制 Postgres 使用 UTF8 编码安装,而不是 LATIN1?

标签 postgresql encoding vagrant

我正在尝试在 Vagrant 盒子上设置 CartoDB,following the instructions here .但是,它一直失败,因为它提示 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 编码自行安装?

最佳答案

这可能不是您正在寻找的答案,但您可以使用以下命令将 PostgreSQL 切换到不同的语言环境(备份、重新创建集群和恢复):

sudo -u postgres pg_dumpall > /tmp/postgres.sql
sudo pg_dropcluster --stop 9.1 main
sudo pg_createcluster --locale en_US.UTF-8 --start 9.1 main
sudo -u postgres psql -f /tmp/postgres.sql

如果您想知道为什么安装使用拉丁语,那么您可能需要深入研究安装脚本。但是,如果 en_US.UTF-8 不是您的默认系统区域设置,那可能就是问题所在。安装脚本可以加载/etc/default/locale

关于postgresql - 强制 Postgres 使用 UTF8 编码安装,而不是 LATIN1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20815440/

相关文章:

postgresql - Npgsql 与 PostgreSQL : Can't see uncommitted changes with UNCOMMITTED READ

python - 用于添加索引的 SQLAlchemy/Alembic 原始 SQL

postgresql - 不同机器(相同语言环境)上的 Postgres 实例之间的排序差异

Python Scrapy不返回中文字符

java - 如何转换特殊字符, "Fran%c3%a7ais"-> "Français"?

apache - 如何通过 https 使用 Vagrant & Puppet

sqlite - 新的sqlite3数据库已锁定

sql - 仅选择某些列仅包含特定值的 ID

python - 从 Python 脚本使用 POST 发送文件

docker - 在主机上找不到Docker数据量