PostgreSQL 7.4 中文文档 -- 字符集支持
来源:互联网 发布:mac如何自动登录 编辑:程序博客网 时间:2024/05/22 13:08
PostgreSQL 里面的字符集支持 你能够以各种字符集存储文本,包括单字节的字符集,比如 ISO 8859 系列和 EUC (扩展 Unix 编码 Extended Unix Code),Unicode 和 Mule 国际编码.所有字符集都可以在服务器上透明地使用。 (如果你使用了来自其它数据源地扩展函数,那么它取决于他们是否正确 地书写了代码。)缺省的字符集是在使用 initdb 初始化 你的 PostgreSQL 数据库集群的时候选择的。 在你的使用 createdb 或者 SQL 命令 CREATE DATABASE 的时候是可以覆盖这个缺省的。因此,你可以有多个数据库,每个都有不同 的字符集。
20.2.1. 支持字符集编码
Table 20-1 显示了可以用在服务器的字符集。
Table 20-1. 服务器字符集
Important: 在 PostgreSQL7.2 之前, LATIN5错误地表示 ISO 8859-5 的意思. 从 7.2 开始 LATIN5表示 ISO8859-9. 如果你有一个在 7.1 或者之前创建的 使用了 LATIN5的数据库, 而且你希望移植到 7.2(或者以后的版本), 那么你必须非常仔细地注意这个变化.
并非所有API支持上面列出的编码.比如, PostgreSQL JDBC 驱动就不支持MULE_INTERNAL, LATIN6,LATIN8 和 LATIN10.
20.2.2. 设置字符集
initdb 为一个 PostgreSQL 集群定义缺省的字符集,比如:
initdb -E EUC_JP
把缺省字符集设置为 EUC_JP (用于日文的扩展的 Unix 编码). 如果你喜欢用长选项声明的话,你可以用 --encoding 代替 -E. 如果没有给出-E或者--encoding选项, 则使用SQL_ASCII。
你可以创建一个有着不同编码的数据库:
createdb -E EUC_KR korean
将创建一个使用EUC_KR字符集的名字叫 korean 的数据库. 另外一种实现方法是使用 SQL 命令:
CREATE DATABASE korean WITH ENCODING 'EUC_KR';
数据库的编码是用系统表 pg_database 里的一个 编码字段代表的. 你可以用psql的-l选项或 /l命令列出这些编码.
$ psql -l List of databases Database | Owner | Encoding---------------+---------+--------------- euc_cn | t-ishii | EUC_CN euc_jp | t-ishii | EUC_JP euc_kr | t-ishii | EUC_KR euc_tw | t-ishii | EUC_TW mule_internal | t-ishii | MULE_INTERNAL regression | t-ishii | SQL_ASCII template1 | t-ishii | EUC_JP test | t-ishii | EUC_JP unicode | t-ishii | UNICODE(9 rows)
20.2.3. 服务器和客户端之间的自动字符集转换
PostgreSQL 支持一些编码 在服务器和前端之间的自动编码转换. 转换信息在系统表 pg_conversion 中存储。 你可以使用 SQL 命令 CREATE CONVERSION 创建一个 新的转换。PostgreSQL带着一些预定义的转换。它们在 Table 20-2 中列出.
Table 20-2. 客户/服务器字符集转换
要想打开自动字符集转换功能,你必须告诉 PostgreSQL 你想在客户端使用的字符集(编码).你可以用好几种方法实现这个目的.
-
用 psql 里的 /encoding 命令. /encoding 允许你动态修改客户端编码. 比如,把编码改变为 SJIS,键入:
/encoding SJIS
-
使用 libpq 函数. /encoding 在做此用途的时候实际上是调用 PQsetClientEncoding().
int PQsetClientEncoding(PGconn *conn, const char *encoding);
这里 conn 与后端的联接,而 encoding 是你想用的编码.如果编码设置成功 它返回 0,否则返回 -1.本次联接的当前编码可以用下面函数显示:
int PQclientEncoding(const PGconn *conn);
请注意它只返回编码 ID,而不是象 EUC_JP 这样的编码符号字串. 要把编码 ID 转换为编码符号,你可以用:
char *pg_encoding_to_char(int encoding_id);
-
使用 SET client_encoding TO. 可以用 SQL 命令设置客户端编码:
SET CLIENT_ENCODING TO 'value';
你还可以把 SQL 语法里的 SET NAMES用于这个目的:
SET NAMES 'value';
查询当前客户端编码:
SHOW client_encoding;
返回缺省编码:
RESET client_encoding;
-
使用 PGCLIENTENCODING. 如果在客户端的环境里定义了 PGCLIENTENCODING 环境变量, 那么在与服务器进行联接时将自动选择客户端编码. (这个编码随后可以用上面谈到的任何其它方法覆盖.)
-
使用client_encoding配置变量。 如果在 postgresql.conf 里设置了 client_encoding 变量, 那么在与服务器建立了联接之后,这个客户端编码将自动选定。(这个设置随后可以被上面提到 的其他方法覆盖。)
假如无法进行特定的字符转换 -- 比如, 你选的服务器编码是EUC_JP, 客户端是LATIN1,那么有些日文字符不能 转换成LATIN1.这时, 不能用LATIN1字符集表示的字母将被转换成 圆括弧包围的十六进制,像,(826C) 这样。
20.2.4. 进一步阅读
下面是学习各种类型的编码系统的好地方.
- ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/cjk.inf
详细地解释了第3.2节出现的EUC_JP, EUC_CN,EUC_KR,EUC_TW.
- http://www.unicode.org/
Unicode 的家目录.
- RFC 2044
定义了UTF-8.
- PostgreSQL 7.4 中文文档 -- 字符集支持
- mysql字符集支持中文
- PostgreSQL中文文档 网址
- PostgreSQL 中文文档
- PostgreSQL 中文文档
- Oracle 修改字符集 支持中文
- postgresql 字符集
- postgresql 字符集
- Mariadb对中文字符集的支持
- Docker中配置字符集支持中文
- Java字符集检测,更好的支持中文字符集
- linux 安装中文支持包及中文字符集配置
- linux 安装中文支持包及中文字符集配置
- UTF-8不是兼容Unicode吗? 那UTF-8也应该支持中文啊, 为什么上面的XML文档会 出现字符集错误的情况呢?
- 怎样让Oracle支持中文? 语言_地域.字符集
- Ubuntu更改MySQL字符集utf8,以支持中文
- mysql修改数据库字符集使支持中文输入
- 【Linux】让Ubuntu 支持 GBK等字符集,解决中文乱码
- 常用的一些javascript小技巧(屏蔽)
- [转]C/C++ 误区一:void main()
- 调用委托后,资源占用哪个线程的? (一个例子)
- 网页常用小技巧(javascript)
- VC 多线程
- PostgreSQL 7.4 中文文档 -- 字符集支持
- 实现FCKeditor 多用户分文件夹上传图片等附件
- [转]C/C++ 误区二:fflush(stdin)
- JSP 9大对象详解
- 面试官最爱提的15个问题
- 连接数据库与角色相关简单实现
- [转]C/C++ 误区三:强制转换 malloc() 的返回值
- JSF调试利器---phase listener
- [ASP.NET] C#的前途如何?