查看字符集、不同字符集之间迁移数据的可行性及风险说明

作者:瀚高PG实验室 (Highgo PG Lab)

目录

文档用途

详细信息

文档用途

本文说明了在瀚高数据库中查看数据库字符集、客户端字符集的方法,不同字符集之间迁移的方法及风险

详细信息

一、背景:

由于瀚高数据库/PostgreSQL数据库是多库结构,因此需要明确说明如下:

1.瀚高数据库/PostgreSQL数据库没有cluster(即:实例)层面的字符集。

2.瀚高数据库/PostgreSQL数据库的字符集是指瀚高数据库/PostgreSQL数据库cluster中某一个database的字符集。

3.本文所说的字符集是Encoding

 

 

瀚高数据库/PostgreSQL数据库支持的字符集见下:

名称描述语言是否服务器端字符集ICU?Bytes/Char别名
BIG5Big FiveTraditional ChineseNoNo1-2WIN950Windows950
EUC_CNExtended UNIX Code-CNSimplified ChineseYesYes1-3 
EUC_JPExtended UNIX Code-JPJapaneseYesYes1-3 
EUC_JIS_2004Extended UNIX Code-JP, JIS X 0213JapaneseYesNo1-3 
EUC_KRExtended UNIX Code-KRKoreanYesYes1-3 
EUC_TWExtended UNIX Code-TWTraditional Chinese, TaiwaneseYesYes1-3 
GB18030National StandardChineseNoNo1-4 
GBKExtended National StandardSimplified ChineseNoNo1-2WIN936Windows936
ISO_8859_5ISO 8859-5, ECMA 113Latin/CyrillicYesYes1 
ISO_8859_6ISO 8859-6, ECMA 114Latin/ArabicYesYes1 
ISO_8859_7ISO 8859-7, ECMA 118Latin/GreekYesYes1 
ISO_8859_8ISO 8859-8, ECMA 121Latin/HebrewYesYes1 
JOHABJOHABKorean (Hangul)NoNo1-3 
KOI8RKOI8-RCyrillic (Russian)YesYes1KOI8
KOI8UKOI8-UCyrillic (Ukrainian)YesYes1 
LATIN1ISO 8859-1, ECMA 94Western EuropeanYesYes1ISO88591
LATIN2ISO 8859-2, ECMA 94Central EuropeanYesYes1ISO88592
LATIN3ISO 8859-3, ECMA 94South EuropeanYesYes1ISO88593
LATIN4ISO 8859-4, ECMA 94North EuropeanYesYes1ISO88594
LATIN5ISO 8859-9, ECMA 128TurkishYesYes1ISO88599
LATIN6ISO 8859-10, ECMA 144NordicYesYes1ISO885910
LATIN7ISO 8859-13BalticYesYes1ISO885913
LATIN8ISO 8859-14CelticYesYes1ISO885914
LATIN9ISO 8859-15LATIN1 with Euro and accentsYesYes1ISO885915
LATIN10ISO 8859-16, ASRO SR 14111RomanianYesNo1ISO885916
MULE_INTERNALMule internal codeMultilingual EmacsYesNo1-4 
SJISShift JISJapaneseNoNo1-2MskanjiShiftJISWIN932Windows932
SHIFT_JIS_2004Shift JIS, JIS X 0213JapaneseNoNo1-2 
SQL_ASCIIunspecified (see text)anyYesNo1 
UHCUnified Hangul CodeKoreanNoNo1-2WIN949Windows949
UTF8Unicode, 8-bitallYesYes1-4Unicode
WIN866Windows CP866CyrillicYesYes1ALT
WIN874Windows CP874ThaiYesNo1 
WIN1250Windows CP1250Central EuropeanYesYes1 
WIN1251Windows CP1251CyrillicYesYes1WIN
WIN1252Windows CP1252Western EuropeanYesYes1 
WIN1253Windows CP1253GreekYesYes1 
WIN1254Windows CP1254TurkishYesYes1 
WIN1255Windows CP1255HebrewYesYes1 
WIN1256Windows CP1256ArabicYesYes1 
WIN1257Windows CP1257BalticYesYes1 
WIN1258Windows CP1258VietnameseYesYes1ABCTCVNTCVN5712VSCII

 

数据库字符集是建立数据库的时候指定的,比如下面的两个命令:

createdb -E EUC_KR -T template0 --lc-collate=ko_KR.euckr --lc-ctype=ko_KR.euckr korean

或者

CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;

 

需要注意一点:

上面第一条语句不应该简写为:createdb -E

原因是:在瀚高数据库中的一个重要限制是:数据库的字符集需要与LC_COLLATE、LC_CTYPE相匹配。

若是在createdb -E时不指定LC_COLLATE、LC_CTYPE,那么createdb -E是从环境变量中获取这两个值。

CREATE DATABASE语句同理。

 

 

查看某个database字符集的方法

1.psql -l或者查询pg_database系统表或者psql中执行\l

2.psql中执行show server_encoding;因为登录psql时需要指定database,所以,只要能成功登录psql,就说明是成功登录了该database。

 

查看客户端字符集的方法:

psql中执行show client_encoding;

 

设置客户端字符集的方法:

1.psql中执行\encoding SJIS

2.libpq中设置

3.psql中执行set client_encoding to 'LATIN1';

4.psql中执行set names 'LATIN3';

5.在客户端上使用PGCLIENTENCODING环境变量,此时,在与服务器建立连接时会自动选择该PGCLIENTENCODING的值。之后,可以使用上面的任何一个方法覆盖掉环境变量PGCLIENTENCODING的值

6.使用配置参数client_encoding,若是client_encoding被设置,当客户端与服务器端建立连接之后,会自动选择client_encoding参数值,之后,可以使用上面的任何一个方法覆盖掉环境变量PGCLIENTENCODING的值

 

 

 

二、不同字符集之间迁移数据的方法

 

迁移需要在满足“瀚高数据库支持client端与服务器端转换的字符集匹配关系”的前提下进行转换,该匹配关系见下面的表格:

服务器端字符集可用的客户端字符集
BIG5not supported as a server encoding
EUC_CNEUC_CNMULE_INTERNALUTF8
EUC_JPEUC_JPMULE_INTERNALSJISUTF8
EUC_JIS_2004EUC_JIS_2004SHIFT_JIS_2004UTF8
EUC_KREUC_KRMULE_INTERNALUTF8
EUC_TWEUC_TWBIG5MULE_INTERNALUTF8
GB18030not supported as a server encoding
GBKnot supported as a server encoding
ISO_8859_5ISO_8859_5KOI8RMULE_INTERNALUTF8WIN866WIN1251
ISO_8859_6ISO_8859_6UTF8
ISO_8859_7ISO_8859_7UTF8
ISO_8859_8ISO_8859_8UTF8
JOHABnot supported as a server encoding
KOI8RKOI8RISO_8859_5MULE_INTERNALUTF8WIN866WIN1251
KOI8UKOI8UUTF8
LATIN1LATIN1MULE_INTERNALUTF8
LATIN2LATIN2MULE_INTERNALUTF8WIN1250
LATIN3LATIN3MULE_INTERNALUTF8
LATIN4LATIN4MULE_INTERNALUTF8
LATIN5LATIN5UTF8
LATIN6LATIN6UTF8
LATIN7LATIN7UTF8
LATIN8LATIN8UTF8
LATIN9LATIN9UTF8
LATIN10LATIN10UTF8
MULE_INTERNALMULE_INTERNALBIG5EUC_CNEUC_JPEUC_KREUC_TWISO_8859_5KOI8RLATIN1 to LATIN4SJISWIN866WIN1250WIN1251
SJISnot supported as a server encoding
SHIFT_JIS_2004not supported as a server encoding
SQL_ASCIIany (no conversion will be performed)
UHCnot supported as a server encoding
UTF8all supported encodings
WIN866WIN866ISO_8859_5KOI8RMULE_INTERNALUTF8WIN1251
WIN874WIN874UTF8
WIN1250WIN1250LATIN2MULE_INTERNALUTF8
WIN1251WIN1251ISO_8859_5KOI8RMULE_INTERNALUTF8WIN866
WIN1252WIN1252UTF8
WIN1253WIN1253UTF8
WIN1254WIN1254UTF8
WIN1255WIN1255UTF8
WIN1256WIN1256UTF8
WIN1257WIN1257UTF8
WIN1258WIN1258UTF8

更多详细信息请登录【瀚高技术支持平台】查看https://support.highgo.com/#/index/docContentHighgo/72aef7e803f95152

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值