设为首页 收藏本站
查看: 2089|回复: 0

[经验分享] postgresql 字符集

[复制链接]

尚未签到

发表于 2016-11-21 08:30:02 | 显示全部楼层 |阅读模式
  postgresql数据库支持多种字符集,在配置字符集时要分清楚服务器与客户端的字符集,字符集不一致尽管有时能够发生转换,但带来的问题也很头疼。语言环境的配置也很重要。
服务器字符集<来自文档>:

DSC0000.gif DSC0001.gif 代码



Name    Description    Language    Server?    Bytes/Char    Aliases
BIG5    Big Five    Traditional Chinese    No    1-2    WIN950, Windows950
EUC_CN    Extended UNIX Code-CN    Simplified Chinese    Yes    1-3     
EUC_JP    Extended UNIX Code-JP    Japanese    Yes    1-3     
EUC_JIS_2004    Extended UNIX Code-JP, JIS X 0213    Japanese    Yes    1-3     
EUC_KR    Extended UNIX Code-KR    Korean    Yes    1-3     
EUC_TW    Extended UNIX Code-TW    Traditional Chinese, Taiwanese    Yes    1-3     
GB18030    National Standard    Chinese    No    1-2     
GBK    Extended National Standard    Simplified Chinese    No    1-2    WIN936, Windows936
ISO_8859_5    ISO 8859-5, ECMA 113    Latin/Cyrillic    Yes    1     
ISO_8859_6    ISO 8859-6, ECMA 114    Latin/Arabic    Yes    1     
ISO_8859_7    ISO 8859-7, ECMA 118    Latin/Greek    Yes    1     
ISO_8859_8    ISO 8859-8, ECMA 121    Latin/Hebrew    Yes    1     
JOHAB    JOHAB    Korean (Hangul)    No    1-3     
KOI8    KOI8-R(U)    Cyrillic    Yes    1    KOI8R
LATIN1    ISO 8859-1, ECMA 94    Western European    Yes    1    ISO88591
LATIN2    ISO 8859-2, ECMA 94    Central European    Yes    1    ISO88592
LATIN3    ISO 8859-3, ECMA 94    South European    Yes    1    ISO88593
LATIN4    ISO 8859-4, ECMA 94    North European    Yes    1    ISO88594
LATIN5    ISO 8859-9, ECMA 128    Turkish    Yes    1    ISO88599
LATIN6    ISO 8859-10, ECMA 144    Nordic    Yes    1    ISO885910
LATIN7    ISO 8859-13    Baltic    Yes    1    ISO885913
LATIN8    ISO 8859-14    Celtic    Yes    1    ISO885914
LATIN9    ISO 8859-15    LATIN1 with Euro and accents    Yes    1    ISO885915
LATIN10    ISO 8859-16, ASRO SR 14111    Romanian    Yes    1    ISO885916
MULE_INTERNAL    Mule internal code    Multilingual Emacs    Yes    1-4     
SJIS    Shift JIS    Japanese    No    1-2    Mskanji, ShiftJIS, WIN932, Windows932
SHIFT_JIS_2004    Shift JIS, JIS X 0213    Japanese    No    1-2     
SQL_ASCII    unspecified (see text)    any    Yes    1     
UHC    Unified Hangul Code    Korean    No    1-2    WIN949, Windows949
UTF8    Unicode, 8-bit    all    Yes    1-4    Unicode
WIN866    Windows CP866    Cyrillic    Yes    1    ALT
WIN874    Windows CP874    Thai    Yes    1     
WIN1250    Windows CP1250    Central European    Yes    1     
WIN1251    Windows CP1251    Cyrillic    Yes    1    WIN
WIN1252    Windows CP1252    Western European    Yes    1     
WIN1253    Windows CP1253    Greek    Yes    1     
WIN1254    Windows CP1254    Turkish    Yes    1     
WIN1255    Windows CP1255    Hebrew    Yes    1     
WIN1256    Windows CP1256    Arabic    Yes    1     
WIN1257    Windows CP1257    Baltic    Yes    1     
WIN1258    Windows CP1258    Vietnamese    Yes    1    ABC, TCVN, TCVN5712, VSCII


  常用的简体中文字符集是UTF8和EUC_CN两种。
可自动转换字符集<来自文档>:
  

代码



Server Character Set    Available Client Character Sets
BIG5    not supported as a server encoding
EUC_CN    EUC_CN, MULE_INTERNAL, UTF8
EUC_JP    EUC_JP, MULE_INTERNAL, SJIS, UTF8
EUC_KR    EUC_KR, MULE_INTERNAL, UTF8
EUC_TW    EUC_TW, BIG5, MULE_INTERNAL, UTF8
GB18030    not supported as a server encoding
GBK    not supported as a server encoding
ISO_8859_5    ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866, WIN1251
ISO_8859_6    ISO_8859_6, UTF8
ISO_8859_7    ISO_8859_7, UTF8
ISO_8859_8    ISO_8859_8, UTF8
JOHAB    JOHAB, UTF8
KOI8    KOI8, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251
LATIN1    LATIN1, MULE_INTERNAL, UTF8
LATIN2    LATIN2, MULE_INTERNAL, UTF8, WIN1250
LATIN3    LATIN3, MULE_INTERNAL, UTF8
LATIN4    LATIN4, MULE_INTERNAL, UTF8
LATIN5    LATIN5, UTF8
LATIN6    LATIN6, UTF8
LATIN7    LATIN7, UTF8
LATIN8    LATIN8, UTF8
LATIN9    LATIN9, UTF8
LATIN10    LATIN10, UTF8
MULE_INTERNAL    MULE_INTERNAL, BIG5, EUC_CN, EUC_JP, EUC_KR, EUC_TW, ISO_8859_5, KOI8, LATIN1 to LATIN4, SJIS, WIN866, WIN1250, WIN1251
SJIS    not supported as a server encoding
SQL_ASCII    any (no conversion will be performed)
UHC    not supported as a server encoding
UTF8    all supported encodings
WIN866    WIN866, ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN1251
WIN874    WIN874, UTF8
WIN1250    WIN1250, LATIN2, MULE_INTERNAL, UTF8
WIN1251    WIN1251, ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866
WIN1252    WIN1252, UTF8
WIN1253    WIN1253, UTF8
WIN1254    WIN1254, UTF8
WIN1255    WIN1255, UTF8
WIN1256    WIN1256, UTF8
WIN1257    WIN1257, UTF8
WIN1258    WIN1258, UTF8


  以下针对客户端与服务器字符集配置问题作几个小测试。
  测试一:服务器、客户端、语言环境一致的情况
  

代码



[postgre@iss3984 ~]$ echo $LANG
en_US.UTF-8
[postgre@iss3984 ~]$ psql daduxiong
Welcome to psql 8.3.11 (server 8.3.10), the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
daduxiong=# \l
       List of databases
   Name    |  Owner  | Encoding
-----------+---------+----------
daduxiong | postgre | UTF8
postgres  | postgre | UTF8
template0 | postgre | UTF8
template1 | postgre | UTF8
(4 rows)
daduxiong=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)
daduxiong=# insert into t1 values (1,'中国');
INSERT 0 1
daduxiong=# select * from t1;
id |          name         
----+------------------------
  1 | 中国                 
(1 row)


  服务器与客户端字符集相同,在数据录入时不发生字符集转换;因语言环境也相同所以展现不会出现乱码。
  测试二:客户端与服务器、语言环境不一致的情况
  

代码



daduxiong=# \encoding GBK
daduxiong=# show client_encoding;
client_encoding
-----------------
GBK
(1 row)
daduxiong=# insert into t1 values (2,'日本');
INSERT 0 1
daduxiong=# select * from t1;
id |          name         
----+-------------------------
  1 | �й�                 
  2 | 日本               
(2 rows)


  客户端与服务器的字符集不一致,在数据录入时将发生字符集转换;当前展现的第二条记录非乱码形式是因为客户端字符集为GBK,在UTF8下同样出现乱码,在使用时需要语言环境进行配置。
  测试三:服务器与客户端、语言环境不一致的情况

代码



daduxiong=# \q
[postgre@iss3984 ~]$ LANG=GBK export LANG
[postgre@iss3984 ~]$ echo $LANG
GBK
[postgre@iss3984 ~]$ psql daduxiong
Welcome to psql 8.3.11 (server 8.3.10), the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
daduxiong=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)
daduxiong=# \encoding GBK
daduxiong=# select * from t1;
id |          name         
----+-------------------------
  1 | �й�                 
  2 | 日本               
(2 rows)
daduxiong=# insert into t1 values (3,'美国');
INSERT 0 1
daduxiong=# select * from t1;
id |          name         
----+-------------------------
  1 | �й�                 
  2 | 日本               
  3 | 美国               
(3 rows)
daduxiong=# \q


  客户端、语言环境均配置为GBK字符集,在当前环境下展现的为非乱码形式,数据录入时将发生字符集转换。
  测试四:服务器与客户端、语言环境恢复一致的情况

代码



[postgre@iss3984 ~]$ LANG=en_US.UTF8 export LANG
[postgre@iss3984 ~]$ psql daduxiong
Welcome to psql 8.3.11 (server 8.3.10), the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
daduxiong=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)
daduxiong=# select * from t1;
id |          name         
----+-------------------------
  1 | 中国                 
  2 | 鏃ユ湰               
  3 | 缇庡浗               
(3 rows)
daduxiong=#
通过恢复原始的字符集状态,所有环境均为UTF8字符集,此时发现经过字符集转换后的内容为乱码。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303171-1-1.html 上篇帖子: PostgreSQL学习手册(数据库管理) 下篇帖子: Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表