简述PostgreSQL字符集的几种形式

数据库 其他数据库 PostgreSQL
今天我们要简述一下PostgreSQL字符集的几种形式,希望通过本文能让大家对字符集有一个更深刻的理解。

PostgreSQL数据库支持多种字符集,在配置字符集时要分清楚服务器与客户端的字符集,字符集不一致尽管有时能够发生转换,但带来的问题也很头疼。语言环境的配置也很重要。

服务器字符集<来自文档>:

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

常用的简体中文字符集是UTF8和EUC_CN两种。

可自动转换字符集<来自文档>:

  1. Server Character Set Available Client Character Sets  
  2. BIG5 not supported as a server encoding  
  3. EUC_CN EUC_CN, MULE_INTERNAL, UTF8  
  4. EUC_JP EUC_JP, MULE_INTERNAL, SJIS, UTF8  
  5. EUC_KR EUC_KR, MULE_INTERNAL, UTF8  
  6. EUC_TW EUC_TW, BIG5, MULE_INTERNAL, UTF8  
  7. GB18030 not supported as a server encoding  
  8. GBK not supported as a server encoding  
  9. ISO_8859_5 ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866, WIN1251  
  10. ISO_8859_6 ISO_8859_6, UTF8  
  11. ISO_8859_7 ISO_8859_7, UTF8  
  12. ISO_8859_8 ISO_8859_8, UTF8  
  13. JOHAB JOHAB, UTF8  
  14. KOI8 KOI8, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251  
  15. LATIN1 LATIN1, MULE_INTERNAL, UTF8  
  16. LATIN2 LATIN2, MULE_INTERNAL, UTF8, WIN1250  
  17. LATIN3 LATIN3, MULE_INTERNAL, UTF8  
  18. LATIN4 LATIN4, MULE_INTERNAL, UTF8  
  19. LATIN5 LATIN5, UTF8  
  20. LATIN6 LATIN6, UTF8  
  21. LATIN7 LATIN7, UTF8  
  22. LATIN8 LATIN8, UTF8  
  23. LATIN9 LATIN9, UTF8  
  24. LATIN10 LATIN10, UTF8  
  25. MULE_INTERNAL MULE_INTERNAL, BIG5, EUC_CN, EUC_JP, EUC_KR, EUC_TW, ISO_8859_5, KOI8, LATIN1 to LATIN4, SJIS, WIN866, WIN1250, WIN1251  
  26. SJIS not supported as a server encoding  
  27. SQL_ASCII any (no conversion will be performed)  
  28. UHC not supported as a server encoding  
  29. UTF8 all supported encodings  
  30. WIN866 WIN866, ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN1251  
  31. WIN874 WIN874, UTF8  
  32. WIN1250 WIN1250, LATIN2, MULE_INTERNAL, UTF8  
  33. WIN1251 WIN1251, ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866  
  34. WIN1252 WIN1252, UTF8  
  35. WIN1253 WIN1253, UTF8  
  36. WIN1254 WIN1254, UTF8  
  37. WIN1255 WIN1255, UTF8  
  38. WIN1256 WIN1256, UTF8  
  39. WIN1257 WIN1257, UTF8  
  40. WIN1258 WIN1258, UTF8 

以下针对客户端与服务器字符集配置问题作几个小测试。

测试一:服务器、客户端、语言环境一致的情况

  1. [postgre@iss3984 ~]$ echo $LANG
  2. en_US.UTF-8
  3. [postgre@iss3984 ~]$ psql daduxiong
  4. Welcome to psql 8.3.11 (server 8.3.10), the PostgreSQL interactive terminal.
  5. Type:    
  6. \copyright for distribution terms        
  7. \h for help with SQL commands         
  8. \? for help with psql commands         
  9. \g or terminate with semicolon to execute query       
  10. \q to quitdaduxiong=# \l         
  11. List of databases    
  12.  Name    |  Owner  | Encoding
  13. -----------+---------+---------- 
  14. daduxiong | postgre | UTF8 
  15. postgres  | postgre | UTF8 
  16. template0 | postgre | UTF8 
  17. template1 | postgre | UTF8(4 rows)
  18. daduxiong=# show client_encoding; 
  19. client_encoding----------------- 
  20. UTF8(1 row)daduxiong=# insert into t1 values (1,'中国');
  21. INSERT 0 1
  22. daduxiong=# select * from t1; id |          
  23. name         
  24. ----+------------------------  
  25. 1 | 中国                 (1 row) 

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

测试二:客户端与服务器、语言环境不一致的情况

  1. daduxiong=# \encoding   
  2. GBKdaduxiong=# show   
  3. client_encoding;   
  4. client_encoding-----------------   
  5. GBK(1 row)  
  6. daduxiong=# insert into t1 values (2,'日本');  
  7. INSERT 0 1daduxiong=# select * from t1;   
  8. id |          name            
  9. ----+-------------------------    
  10. 1 | �й�                     
  11. 2 | 日本                (2 rows) 

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

测试三:服务器与客户端、语言环境不一致的情况

  1. daduxiong=# \q  
  2. [postgre@iss3984 ~]$ LANG=GBK export LANG  
  3. [postgre@iss3984 ~]$ echo $LANG  
  4. GBK  
  5. [postgre@iss3984 ~]$ psql daduxiong  
  6. Welcome to psql 8.3.11 (server 8.3.10), the PostgreSQL interactive terminal.  
  7. Type:    
  8. \copyright for distribution terms         
  9. \h for help with SQL commands         
  10. \? for help with psql commands         
  11. \g or terminate with semicolon to execute query         
  12. \q to quitdaduxiong=# show client_encoding;   
  13. client_encoding  
  14. -----------------  
  15.  UTF8  
  16. (1 row)  
  17. daduxiong=# \encoding GBK  
  18. daduxiong=# select * from t1;   
  19. id |          name            
  20. ----+-------------------------    
  21. 1 | �й�                     
  22. 2 | 日本                  
  23. (2 rows)  
  24. daduxiong=# insert into t1 values (3,'美国');  
  25. INSERT 0 1daduxiong=# select * from t1;   
  26. id |          name            
  27. ----+-------------------------    
  28. 1 | �й�                     
  29. 2 | 日本                    
  30. 3 | 美国                  
  31. (3 rows)daduxiong=# \q 

客户端、语言环境均配置为GBK字符集,在当前环境下展现的为非乱码形式,数据录入时将发生字符集转换。

测试四:服务器与客户端、语言环境恢复一致的情况

  1. [postgre@iss3984 ~]$ LANG=en_US.UTF8 export LANG  
  2. [postgre@iss3984 ~]$ psql daduxiong  
  3. Welcome to psql 8.3.11 (server 8.3.10), the PostgreSQL interactive terminal.  
  4. Type:  \copyright for distribution terms         
  5. \h for help with SQL commands        
  6. \? for help with psql commands         
  7. \g or terminate with semicolon to execute query        
  8. \q to quitdaduxiong=# show client_encoding; client_encoding
  9. -----------------   
  10. UTF8(1 row)  
  11. daduxiong=# select * from t1;   
  12. id |          name            
  13. ----+-------------------------    
  14. 1 | 中国                     
  15. 2 | 鏃ユ湰                    
  16. 3 | 缇庡浗                 
  17.  (3 rows)daduxiong=#  

通过恢复原始的PostgreSQL字符集状态,所有环境均为UTF8字符集,此时发现经过字符集转换后的内容为乱码。

原文标题:postgresql 字符集

链接:http://www.cnblogs.com/daduxiong/archive/2010/10/14/1851552.html

【编辑推荐】

  1. PostgreSQL新版提高Oracle兼容性 欲与甲骨文试比高?
  2. Sun如何处理PostgreSQL和Java DB?
  3. PostgreSQL 8.2简介 附下载地址
  4. 简评MySQL和PostgreSQL优劣
  5. 将你的网站从MySQL改为PostgreSQL

 

责任编辑:彭凡 来源: 博客园
相关推荐

2010-04-30 10:16:22

Oracle字符集

2011-04-11 10:59:33

Oracle字符集

2011-04-11 11:05:12

Oracle字符集

2010-06-07 16:09:58

MySQL字符集

2010-06-02 17:59:19

MySQL字符集

2020-12-16 06:34:16

MySQL字符集服务器

2021-03-23 18:21:30

MySQL数据库字符集

2009-11-20 16:52:35

Oracle字符集

2010-06-13 16:17:26

MySQL改变字符集

2009-02-24 10:51:30

2011-05-16 13:15:55

MySQL存储字符集

2011-05-20 13:24:39

oracle字符集

2010-11-23 17:04:54

MySQL字符集

2010-04-28 17:29:07

Oracle字符集

2010-11-01 15:44:45

DB2字符集

2009-07-29 13:42:04

Oracle中文显示

2010-10-14 11:52:38

MySQL字符集

2010-05-06 14:40:59

Oracle字符集

2010-10-09 10:57:22

MySQL默认字符集

2010-10-09 11:31:25

MySQL字符集
点赞
收藏

51CTO技术栈公众号