`
deepfuture
  • 浏览: 4332862 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79404
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68361
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101484
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:281140
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14597
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65552
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31311
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45199
社区版块
存档分类
最新评论

中文环境下PostgreSQL的使用

 
阅读更多

中文环境下PostgreSQL的使用

galylee@gmail.com

http://www.redgres.com/web/node/8


虽然官方文档有提到编码的问题,但是对于中文讲的比较简单,给中文的PostgreSQL用户带来很多困扰,本文简单简述一下中文环境下PostgreSQL如何正确设置编码。

一、服务器端的编码设置

PostgreSQL在服务器端只支持两种简体中文编码: EUC_CN和UTF-8,而由于windows不支持EUC所以,在windows环境底下只能选UTF-8。

1. 安装时的编码设置

1.1 Linux下的中文编码设置

设置为EUC_CN
[localhost ~]$ initdb -E EUC_CN -D data7 --locale=zh_CN

设置为UTF-8
[galy@localhost ~]$ initdb -E UTF-8 -D data7 --locale=zh_CN.UTF-8

1.2 Windows下的中文编码设置

设置为UTF-8
initdb.exe -E UTF8  -D c:\data3  --locale=chinese

2. 常见的问题:

2.1 不支持的服务器编码

如果环境的默认编码是PostgreSQL不支持的话,初始化的时候会报错,如下面环境的中文编码为GBK,而PG不支持GBK,所以报错。
[localhost ~]$ export LANG=zh_CN.gbk
[localhost ~]$ initdb -D testencoding

The database cluster will be initialized with locale zh_CN.gbk.
initdb: locale zh_CN.gbk requires unsupported encoding GBK
Encoding GBK is not allowed as a server-side encoding.
Rerun initdb with a different locale selection.

2.2 locale和编码有冲突

如果指定的locale和编码格式有冲突,同样也会报错。解决的方便是,指定编码兼容的locale.

[localhost ~]$ locale
LANG=zh_CN.gbk
LC_CTYPE="zh_CN.gbk"

默认的locale是中文gbk, 而下面的编码确实EUC_CN,因而系统报错,解决的方法是,指定--locale=zh_CN

[localhost ~]$ initdb -E EUC_CN -D data6
The files belonging to this database system will be owned by user "galy".
This user must also own the server process.

The database cluster will be initialized with locale zh_CN.gbk.
initdb: encoding mismatch
The encoding you selected (EUC_CN) and the encoding that the
selected locale uses (GBK) do not match.  This would lead to
misbehavior in various character string processing functions.
Rerun initdb and either do not specify an encoding explicitly,
or choose a matching combination.

initdb: 警告: 编码不匹配
您选择的编码 (EUC_CN) 和所选择的语言环境使用的编码 (GBK) 不匹配的.
这样将导致处理不同字符串的函数时产生错误.
要修复此问题, 重新运行 initdb 并且不要明确指定编码, 或者先选择一个匹配
组合类型.

二、客户端的编码

虽然PG支持客户端和服务器端的编码自动转换,但是还需要遵从一个原则:本地环境的编码和客户端编码需一致。否则将会出现乱码或者是其他问题。

本地环境的编码为GBK
C:\Program Files\PostgreSQL\9.1\bin>chcp
活动代码页: 936

数据库的编码为UTF8
=#\t
Name              | lenovo
Owner             | lenovo
Encoding          | UTF8
Collate           | Chinese (Simplified)_People's Republic of China.936
Ctype             | Chinese (Simplified)_People's Republic of China.936
Access privileges |

客户端编码为GBK
lenovo=# \encoding
GBK

现在本地环境和客户端编码都是GBK,所以没有问题
客户端输入的GBK字符,会自动转化为UTF-8
lenovo=# insert into test values('测试');
INSERT 0 1

服务器端的UTF-8编码,传到客户端时候,也会自动转换编码为GBK:
lenovo=# select * from test;
 name
------
 测试
(1 row)

如果客户端设置为UTF-8的话,和本地环境的GBK不一致则会出现问题
lenovo=# \encoding UTF-8

由于客户端编码和服务器端一致,为UTF-8,所以不转换传到客户端,而操作系统把它当作GBK显示,所以显示乱码:
lenovo=# select * from test;
 name
------
 娴嬭瘯
(1 row)

而插入的字符则直接以GBK编码的形式传到服务器端,服务器端认识不了,所以报错。
lenovo=# insert into test values('测试');
ERROR:  invalid byte sequence for encoding "UTF8": 0xb2
ERROR:  invalid byte sequence for encoding "UTF8": 0xb2

输入和显示都有问题,这是因为如果客户端和服务器的编码都一致的话,则不进行转码,而输入是按照本地环境的GBK进行编码,GBK的编码进入UTF-8的库当然会有问题。

三、显示信息的中文话

PostgreSQL支持多语言显示提示信息,如果希望服务器端及客户端的提示信息为中文,还需要进行一些额外的设置。

首先, 编译的时候需要加上自然语言支持模块

./configure --enable-nls

其次,在参数配置文件postgresql.conf设置信息为中文

lc_messages = 'zh_CN'                     # locale for system error message

这样在服务器端和客户端的提示信息都显示为中文

[localhost ~]$
日志:  已启动autovacuum
日志:  数据库系统准备接受连接

# dsd;
错误:  语法错误 在 "dsd" 或附近的 第 1 个字符处
语句:  dsd;
错误:  语法错误 在 "dsd" 或附近的

 

分享到:
评论

相关推荐

    PostgreSQL 8.2.3 中文文档

    操作系统环境 17. 服务器配置 18. 数据库角色和权限 19. 管理数据库 20. 用户认证 21. 区域 22. 日常数据库维护工作 23. 备份与恢复 24. 高可用性与负载均衡 25. 监控数据库的活动 26. 监控磁盘使用情况 ...

    Postgresql中文分词扩展zhparser安装程序【windows&VS2008;环境】

    原因有两个方面,一个是本身像这种数据库服务器一般都是linux系统的,另外一个比较致命,zhparser本身并没提供windows环境下的编译工程,连依赖库scws的readme里也建议在linux环境下使用,或者用cygwin或mingw一类...

    postgresql中文手册

    postgresql8.2.3中文手册 目录 前言 何为 PostgreSQL? PostgreSQL 简史 格式约定 更多信息 臭虫汇报指导 I. 教程 1. 从头开始 2. SQL 语言 3. 高级特性 II. SQL 语言 4. SQL 语法 5. 数据定义 6. 数据...

    PostgreSQL 10.1 手册-中文版[PDF格式]

    PostgreSQL 10.1 中文手册,PDF文档格式,非扫描版本的。欢迎需要的同学用于学习参考 本文档是PostgreSQL的官方文档。 它是PostgreSQL开发人员和其它志愿者与PostgreSQL的开发 并行编写的。它描述了当前版本的...

    postgresql-9.0.4-1 32位Windows安装程序

    不要选择默认(pgsql安装不支持中文Windows的默认语言) 5) 如果连接数据库进行操作时显示乱码: 本地环境的编码和客户端编码需一致。 ->尝试客户端编码改为GBK dbname=# \encoding GBK 6) 配置远程主机和用户...

    离线地图_openstreetmap_postgresql_postgis_mapnik_osm2pgsql_osm数据(等软件)切~~

    同时32位下中文客户端提示信息异常问题,你只能改为英文显示,但是又会有warn信息提示你与本地不符(很烦不是么) 所以结论最新的未必就是最好的。 而且貌似他们已经开始放弃32位了。 还有这个2.1.7貌似是赶工出来...

    postgresql12.12+postgis3.2.3

    postgresql-12.12-1-windows-x64.exe postgis-bundle-pg12x64-setup-3.2.3-1.exe Windows环境下的postgresql+postgis安装包,具体版本号已给出

    离线地图_openstreetmap_postgresql_瓦片

    同时32位下中文客户端提示信息异常问题,你只能改为英文显示,但是又会有warn信息提示你与本地不符(很烦不是么) 所以结论最新的未必就是最好的。 而且貌似他们已经开始放弃32位了。 还有这个2.1.7貌似是赶工出来...

    PostgreSQL12.2中文文档.rar

    postSQL中文学习手册 1、新用户简单介绍; 2、SQL查询语言环境,包括数据类型和函数; 3、服务器安装和管理; 4、pgsql客户端程序的编程接口; 5、服务器的扩展能力

    离线地图_openstreetmap_postgresql_postgis_mapnik_osm2pgsql_osm数据——

    同时32位下中文客户端提示信息异常问题,你只能改为英文显示,但是又会有warn信息提示你与本地不符(很烦不是么) 所以结论最新的未必就是最好的。 而且貌似他们已经开始放弃32位了。 还有这个2.1.7貌似是赶工出来...

    docker-django-postgresql:这是docker-compose创建django环境

    docker-django-postgresql 关于本文档/关于本文档/ 本文档以英文,日文和中文书写。 这句话将用英语,日语和中文写成。 英文,日文和中文文本的副本。...该存储库用作在Docker环境中使用PostgreSQL启动

    postgres 8.3.2中文手册

    非常棒的官方postgresql中文介绍,希望对大家有帮助! 本书是 PostgreSQL 的官方文档。它是由 PostgreSQL 开发人员和其它志愿者撰写的,并且与 PostgreSQL 软件的开发同步进行。它描述了当前版本的 PostgreSQL 官方...

    Greenplum4.2.2管理员指南 中文版

    以个人经验来说,只要有其它关系型数据库的基础,尤其是POSTGRESQL或者INFORMIX基础的(因为GREENPLUM是在POSTGRESQL基础上开发出来的),很容就可以上手学习并掌握GREENPLUM。 GREENPLUM的手册写的非常好,完全可以...

    JDiy框架与javaWeb建站平台 v2.6.1.zip

    修复MSSQL数据库环境下,信息添加时,无法保存上传图片的BUG; 修复MSSQL数据库环境下,自增主键表在save后,无法立即获取新增记录的id的bug. 优化JDiyRequest的InputStream(允许使用第三方上传组件). 修复数据库...

    优秀数据库工具 Database .NET Free 32.1.7761.1 + x64.zip

    经常搞网站开发或者...而且该数据库管理工具也是提供免费使用,支持免安装,简单易用,支持多国语言,支持 Windows XP/2003/Vista/2008/7/8/10/2012 (x86/x64)等系统平台,但是该应用软件需求.NET 4.x以上的环境要求

    phoenix_china_umbrella:Elixir语言Phoenix web框架中文社区(Phoenix and Elixir中文论坛)

    凤凰中文社区 依赖 长生不老药> = 1.4.2 凤凰> = 1.3.0-rc.1 PostgreSQL> = 9.6 节点> = 7.2.0 纱线> = 0.17.9 开发环境首次运行 安装elixir包cd ~/phoenix_china_umbrella && mix deps.get 创建数据库并创建表...

    DBConvert for MSSQL and DB2 2.1.1 中文免费版.zip

    因此,如果您需要在异构环境中传输数据库或在不同平台之间同步数据,我们的解决方案将以最少的工作量自动完成工作。 内置调度程序可帮助您在适合您偏好的时间运行任何任务。 DBConvert for MSSQL下载 产品亮点 ...

    PHP bible(PHP圣经)中文版

    环境需求与准备工作 快速配置及安装 PHP 的编译配置详细选项 php.ini 配置详细选项 如何写作 PHP 程序 第三章 语法 语法简述 hello, world 嵌入方法 引用文件 程序注释 常量与变量 常量类型 变量类型 ...

    zabbix3.0-pgsql9.5-nginx安装

    环境基于zabbix3.0、postgresql9.5,nginx文档含有基础安装和配置,修改支持中文。

Global site tag (gtag.js) - Google Analytics