字符集为ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库

本文涉及的产品
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 相信大家都对字符集有相当的了解了,废话就不多说了!直接步入正题:这里主要是测试含有 汉字的数据从ZHS16GBK的数据库导入到字符集为AL32UTF8 数据库. 如有我没想到的其他情况,请大家提建议,我继续完善测试实验。
相信大家都对字符集有相当的了解了,废话就不多说了!直接步入正题:这里主要是测试含有 汉字的数据从ZHS16GBK的数据库导入到字符集为AL32UTF8

数据库. 如有我没想到的其他情况,请大家提建议,我继续完善测试实验。
测试环境:
目标库:英杰的rac测试库 由
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
sys@rac1>select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------
AMERICAN_AMERICA.AL32UTF8

yang@rac1>select * from nls_database_parameters;
PARAMETER                 VALUE
------------------------- ----------------------------------------
NLS_LANGUAGE              AMERICAN
NLS_TERRITORY             AMERICA
NLS_CURRENCY              $
NLS_ISO_CURRENCY          AMERICA
NLS_NUMERIC_CHARACTERS    .,
NLS_CHARACTERSET          AL32UTF8
NLS_CALENDAR              GREGORIAN
NLS_DATE_FORMAT           DD-MON-RR
NLS_DATE_LANGUAGE         AMERICAN
NLS_SORT                  BINARY
NLS_TIME_FORMAT           HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT      DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT        HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT   DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY         $
NLS_COMP                  BINARY
NLS_LENGTH_SEMANTICS      BYTE
NLS_NCHAR_CONV_EXCP       FALSE
NLS_NCHAR_CHARACTERSET    AL16UTF16
NLS_RDBMS_VERSION         11.2.0.1.0

20 rows selected.

源库:
Release 11.1.0.6.0 - Production on Friday, 11 March, 2011 21:11:49
Conneted to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
源库的nls_ 信息:
sys@ORACL> select * from nls_database_parameters;
PARAMETER                 VALUE
------------------------- --------------------------------------------------
NLS_LANGUAGE              AMERICAN
NLS_TERRITORY             AMERICA
NLS_CURRENCY              $
NLS_ISO_CURRENCY          AMERICA
NLS_NUMERIC_CHARACTERS    .,
NLS_CHARACTERSET          ZHS16GBK
NLS_CALENDAR              GREGORIAN
NLS_DATE_FORMAT           DD-MON-RR
NLS_DATE_LANGUAGE         AMERICAN
NLS_SORT                  BINARY
NLS_TIME_FORMAT           HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT      DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT        HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT   DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY         $
NLS_COMP                  BINARY
NLS_LENGTH_SEMANTICS      BYTE
NLS_NCHAR_CONV_EXCP       FALSE
NLS_NCHAR_CHARACTERSET    AL16UTF16
NLS_RDBMS_VERSION         11.1.0.6.0

测试步骤:这里主要是测试含有 汉字的数据从ZHS16GBK 导入到 AL32UTF8 .
在源库创建含有汉字的表:
yang@ORACL> create table chart ( val varchar2(20));
表已创建。
======创建英文字符数据
yang@ORACL> insert into chart
  2  select dbms_random.string('l',15)
  3  from dual
  4  connect by level 已创建49行。
======创建中文汉字数据
yang@ORACL> insert into chart
  2  select '阿里云' as val from
  3  dual connect by level 已创建49行。
yang@ORACL> select * from chart;

VAL
--------------------
ogqodcrhyqaesks
zifjvopjwwvydjf
oaosnvrzjazdmju
ihpjfwpgzxlbosn
igimjnzkjbaiivf
jxqmgavtpfmlphf
izgrniqmuejiysb
cydqjrbjldnsucq
sikpsorziznhyly
bxstvwdqrqmnylp
ziveucwqsjbmlpu
qdhdwjoxthivxoe
dqideijubqlzeel
qtuyuiwnjigrqcj
gzgamguukwgogib
ufrnfcdtcnmxatg
rpuhrxfzzwmajec
kqsawluuwltmdbf
mlkfeymlhbqsrwj
fokunjivnccjhls
drlkbryvpklhlst
vaigghwmwspounp
qpdslsjqszpasgg
cevwjirdyowhzep
gpktcxauilvpjym
oyrrpyxlroflksp
hqfctsysbpnzkfi
ufcqglfwqgvuwdv
nhloooihrndmrcu
grrtelwqpgnmazw
olzmdcotmziiphj
fmohaagtultvxon
lwsqzgofvhgzajm
vcdeoomgsrzfvjr
pzpfqhpenensoij
nbvxphjkufcvxmj
ydfknwhpnzzpvsw
xzhooomfumuckdc
rohspaowywmblti
dhjctrkkrdlyhvr
yzevspqkpuumjzh
xqmdpotvouvzgzl
rnvcrercdxybwlt
zhbdhamarftudbr
biykwlracluonab
hsdpycatadxhpft
wskchunnmvkbprh
butuurwduseffzc
fosmnbjannddffp
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云

已选择98行。
yang@ORACL> commit;
提交完成。
yang@ORACL> select dump('阿里云') from dual;
DUMP('阿里云')
-------------------------------------
Typ=96 Len=6: 176,162,192,239,212,198 ===三个 汉字 占用6个字节
===================导出操作===================================
Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\aaaa>set nls_lang=american_america.al32utf8 这里后面测试不加也可以成功导入al32utf8
C:\Users\aaaa>expdp yang/yang tables=chart directory=dumpdir  dumpfile=zhs16gbk.dmp
Export: Release 11.1.0.6.0 - Production on Friday, 11 March, 2011 21:19:04
Copyright (c) 2003, 2007, Oracle.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "YANG"."SYS_EXPORT_TABLE_01":  yang/******** tables=chart directory=dumpdir dumpfile=zhs16g
bk.dmp
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "YANG"."CHART"                              6.484 KB      98 rows
Master table "YANG"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for YANG.SYS_EXPORT_TABLE_01 is:
  D:\DUMP\ZHS16GBK.DMP
Job "YANG"."SYS_EXPORT_TABLE_01" successfully completed at 21:19:20
==============================导入到目标库=========================================
oracle@rac1:rac1 /tmp/dump>export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ==.bash_profile 文件里已经声明了,这里是强调一下。
oracle@rac1:rac1 /tmp/dump>impdp yang/yang tables=chart directory=dumpdir dumpfile=zhs16gbk.dmp log=zhs16gbk_to_al32utf8.log
Import: Release 11.2.0.1.0 - Production on Fri Mar 11 21:23:13 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
Legacy Mode Active due to the following parameters:
Legacy Mode Parameter: "log=zhs16gbk_to_al32utf8.log" Location: Command Line, Replaced with: "logfile=zhs16gbk_to_al32utf8.log"
Master table "YANG"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "YANG"."SYS_IMPORT_TABLE_01":  yang/******** tables=chart directory=dumpdir dumpfile=zhs16gbk.dmp

logfile=zhs16gbk_to_al32utf8.log
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "YANG"."CHART"                              6.484 KB      98 rows
Job "YANG"."SYS_IMPORT_TABLE_01" successfully completed at 21:23:17

==============================在目标库中验证=======================================
sys@rac1>select dump('阿里云') from dual;
DUMP('阿里云')
-------------------------------------------------
Typ=96 Len=9: 233,152,191,233,135,140,228,186,145  阿里云 三个汉字 占用 9个字节。

yang@rac1>select table_name from user_tables;
TABLE_NAME
------------------------------
CHARSET
CHART
yang@rac1>select val from chart;
VAL
----------------
ogqodcrhyqaesks
zifjvopjwwvydjf
oaosnvrzjazdmju
ihpjfwpgzxlbosn
igimjnzkjbaiivf
jxqmgavtpfmlphf
izgrniqmuejiysb
cydqjrbjldnsucq
sikpsorziznhyly
bxstvwdqrqmnylp
ziveucwqsjbmlpu
qdhdwjoxthivxoe
dqideijubqlzeel
qtuyuiwnjigrqcj
gzgamguukwgogib
ufrnfcdtcnmxatg
rpuhrxfzzwmajec
kqsawluuwltmdbf
mlkfeymlhbqsrwj
fokunjivnccjhls
drlkbryvpklhlst
vaigghwmwspounp
qpdslsjqszpasgg
cevwjirdyowhzep
gpktcxauilvpjym
oyrrpyxlroflksp
hqfctsysbpnzkfi
ufcqglfwqgvuwdv
nhloooihrndmrcu
grrtelwqpgnmazw
olzmdcotmziiphj
fmohaagtultvxon
lwsqzgofvhgzajm
vcdeoomgsrzfvjr
pzpfqhpenensoij
nbvxphjkufcvxmj
ydfknwhpnzzpvsw
xzhooomfumuckdc
rohspaowywmblti
dhjctrkkrdlyhvr
yzevspqkpuumjzh
xqmdpotvouvzgzl
rnvcrercdxybwlt
zhbdhamarftudbr
biykwlracluonab
hsdpycatadxhpft
wskchunnmvkbprh
butuurwduseffzc
fosmnbjannddffp
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
阿里云
98 rows selected.

小结:字符集子集向其超集转换是可行的,如此例 ZHS16GBK转换为AL32UTF8。
导出使用的字符集将会记录在导出文件中,当文件导入时,将会检查导出时使用的字符集设置,如果这个字符集不同于导入客户端的NLS_LANG
设置,字符集将根据导入客户端NLS_LANG设置进行转换,如果必要,在数据插入数据库之前会进行进一步转换。
通常在导出时最好把客户端字符集设置得和数据库端相同,这样可以避免在导出时发生不必要的数据转换,导出文件将和数据库具有相同的字符集。
即使将来会把导出文件导入到不同字符集的数据库中,这样做也可以把转换延缓至导入时刻。

当进行数据导入时,主要存在以下两种情况:
1.源数据库和目标数据库具有相同字符集设置
这时,只需要设置NLS_LANG等于数据库字符集即可导入(前提是,导出使用的是和源数据库相同字符集,即三者相同)

2.源数据库和目标数据库字符集不同
如果我们导出时候使用的NLS_LANG是和源数据库相同的字符集,那么导入时就可以设置客户端NLS_LANG等于导出时使用的字符集,这
样转换只发生在数据库端,而且只发生一次。

例如:
如果进行从ZHS16GBK到UTF8的转换
1)使用NLS_LANG=AMERICAN_AMERICA.ZHS16GBK导出数据库。
这时创建的导出文件包含ZHS16GBK的数据
2)导入时使用NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
这时转换仅发生在insert数据到UTF8的数据库中。

以上假设的转换只在目标数据库字符集是源数据库字符集的超集时才能转换。
参考文章:
http://www.itpub.net/thread-538197-1-1.html
http://www.itpub.net/viewthread.php?tid=276524&extra=page%3D1&page=1
http://www.eygle.com/archives/2004/09/nls_character_set_04.html

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
312 0
|
4月前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
|
2月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
233 1
|
3月前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
82 0
|
4月前
|
关系型数据库 MySQL 大数据
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
|
4月前
|
SQL 数据可视化 关系型数据库
成功解决7版本的数据库导入 8版本数据库脚本报错问题
您提供的链接是一篇关于如何解决在MySQL数据库中导入脚本时出现版本兼容性问题的博客文章。文章中提到,如果在MySQL 5.7之前的版本中使用utf8mb4_0900_ai_ci排序规则,会遇到"Unknown collation"错误。解决办法包括升级MySQL版本到8.0或更高,或者更改排序规则为utf8mb4_general_ci或utf8mb4_unicode_ci,并提供了修改SQL脚本的示例。 如果您需要更详细的信息或有其他问题,请告诉我。
|
4月前
|
SQL 关系型数据库 MySQL
如何在 MySQL 或 MariaDB 中导入和导出数据库
如何在 MySQL 或 MariaDB 中导入和导出数据库
577 0
|
4月前
|
JSON NoSQL MongoDB
在Ubuntu 14.04上如何导入和导出MongoDB数据库
在Ubuntu 14.04上如何导入和导出MongoDB数据库
24 0
|
4月前
|
安全 关系型数据库 MySQL
如何在 MySQL 中导入和导出数据库以及重置 root 密码
如何在 MySQL 中导入和导出数据库以及重置 root 密码
52 0
|
5月前
|
分布式计算 DataWorks 关系型数据库
阿里云数加-分析型数据库AnalyticDB数据导入的多样化策略
通过合理利用这些数据导入方法,用户可以充分发挥AnalyticDB的实时计算能力和高并发查询性能,为业务分析和决策提供强有力的数据支持。