当前位置: 首页 > 网络应用技术

详细说明甲骨文数据以麦克斯科列表

时间:2023-03-06 15:20:35 网络应用技术

  简介:将Oracle数据集成到MaxCompute,以及乱码问题的问题;为什么在Oracle数据中,它没有被弄乱,并且被插入以集成到MaxCompute?哪里有问题?

  DataWorks的数据是离线(Datax)集成的Oracle数据以达到MaxCompute数据,但对于源库来说并不是乱码。是什么原因?

  现象:[oracle;工具:PLSQL-DEV]

  [MaxCompute;工具:dataworks]

  从test.mdtsb中选择op_user

  UUID ='161A45E75BC88040E053441074848040';

  使用两个Oracle功能:

  【倾倒;转变;】

  http://docs.oracle.com/database/122/sqlrf/dump.htm#sqlrf00635

  http://docs.oracle.com/database/122/sqlrf/convert.htm#sqlrf00620

  为了避免正确的转编码,是因为Just Glabled列的真实字符集与操作系统字符集相同,显示为正常。选择了Linux环境。客户端字符集设置为UTF8,SQLPLU用于查询和分析问题。

  1.熟悉环境:

  sql>从dual中选择usernv('language');

  USERENV(“语言”)

  ------------------------------------------------------------------------------------- -

  简化中文_CHINA.AL32UTF8

  2.将转储功能输出文本的相应编码:

  SQL>从test.mdtsb中选择转储(OP_USER,1016)

  UUID ='161A45E75BC88040E053441074848040';

  转储(OP_USER,1016)

  ------------------------------------------------------------------------------------- -

  typ = 1 len = 6characterset = al32utf8:c0,ee,be,b0,ea,bb

  有三个信息输出此功能输出

  1.长度为6个字节

  2.字符集为AL32UTF8

  3.字符编码为C0,EE,B0,EA,BB

  通过这些信息,我们猜测原始字符集可能是GBK或GB18030的字符集的编码,GB231222.B23122.由于三个中文字符,如果它们是UTF8,则大多数代码是对应于三个字节的中文字符。编码。对应于GBK字符集的对应于双字节。

  3.查看与C0,EE,BE,B0,EA,BB相对应的GBK字符

  http://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php

  C0,EE

  是,B0

  EA,BB

  因此,可以确定该字符编码属于GBK类。

  4.与男人相对应的GBK编码

  http://www.qqxiuzi.cn/bianma/zifuji.php

  李子

  GB2312编码:C0EE

  BIG5代码:A7F5

  GBK代码:C0EE

  GB18030编码:C0EE

  Unicode代码:674E

  场景

  GB2312编码:BEB0

  Big5代码:B4BA

  GBK代码:BEB0

  GB18030代码:BEB0

  Unicode代码:666F

  苍凉

  GB2312编码:EABB

  Big5编码:A9FE

  GBK代码:EABB

  GB18030编码:EABB

  Unicode代码:660A

  可以看出,这三个中文字符的可能代码为:GB2312,GB18030,GBK。

  5.使用转换函数将字符串编码转换为AL32UTF8

  sql>从test.mdtsb中选择convert(op_user,'al32utf8','zhs16gbk')

  UUID ='161A45E75BC88040E053441074848040';

  convert(op_user,'al32utf8','zhs16gbk')

  ------------------------------------------------------------------------------------------

  李金霍

  这个结果验证了我们的猜测。此字符集应该是GBK类的角色集,但是由于GBK和GB18030,GB2312不是完整的父亲 - 藏的关系,所以这只能是其中之一。这只是GBK字符集更常用于当前的观点。

  sql>从test.mdtsb中选择convert(op_user,'al32utf8','zhs16gbk')

  UUID ='161A45E75BC88040E053441074848040';

  convert(op_user,'al32utf8','zhs16cgb231280')

  ------------------------------------------------------------------------------------------

  李金霍

  sql>从test.mdtsb中选择convert(op_user,'al32utf8','zhs16gbk')

  UUID ='161A45E75BC88040E053441074848040';

  convert(op_user,'al32utf8','zhs32gb18030')

  ------------------------------------------------------------------------------------------

  李金霍

  6.检查与这三个中文字符相对应的UTF8的字符串编码

  网站:http://www.qqxiuzi.cn/bianma/unicode-utf.php

  李子

  Unicode代码:0000674E

  UTF8编码:E69D8E

  UTF16代码:FEFF674E

  UTF32编码:0000FEFF0000674E

  场景

  Unicode代码:0000666F

  UTF8代码:E699AF

  UTF16编码:FEFF666F

  UTF32编码:0000FEFF000000666F

  苍凉

  Unicode代码:0000660A

  UTF8代码:E6988A

  UTF16代码:FEFF660A

  UTF32编码:0000FEFF0000660A

  因此,如果原始字符串编码是UTF8,则从理论上讲,我们通过转储函数获得的字符串编码应为:E6,9D,8E,E69,AF,E68,8A

  通过转换函数转换相反功能:

  sql>选择转储(convert(op_user,'al32utf8','zhs16gbk'),1016),test.mdtsb

  其中uuid ='161A45E75BC88040E053441074848040';

  转储(convert(op_user,'al32utf8','zhs16gbk'),1016)

  ------------------------------------------------------------------------------------------

  typ = 1 len = 9Characterset = al32utf8:e6,9d,8e,e6,99,af,e68,8a

  此结果验证了我们以前的查询结果。UTF8字符集的编码应为:

  E6,9D,8E,E6,99,AF,E6,98,8A。

  综上所述:

  Oracle数据库中存储的列的实际编码是GBK类的字符集,因为客户端环境的字符编码是相同的,因此可以显示。实际上,存储的字符集应为UTF8。因此,标记的编码与实际的编码包裹不一致。

  回复:

  通过在数据同步任务的相应列上测试字符集获得的真实字符集,并使用转换函数(op_user,'al32utf8','zhs16gbk')进行转换。

  例如:从matdoc中选择转换(key1,'zhs16gbk','utf8');

  [MaxCompute;工具:dataworks]

  从maxCompute.mdtsb中选择op_user,其中uuid ='161A45E75BC880404040441074804040';

  实际上,MaxCompute中有相关的功能来分析和转换字符代码,但是我们只能在MaxCompute.-8上存储一个字符集“ UTF-8”。以下两个函数是MaxCompute的字符编码相关功能。

  ·编码

  命令格式

  二进制编码(字符串,字符串)

  命令说明

  Str以Charset格式编码。

  参数说明

  str:必须-fill.string type.String要重新编码。

  charset:必须填充。String类型。编码格式。值范围为:UTF-8,UTF-16,UTF-16LE,UTF-16BE,ISO-8859-1,US-ASCII。

  返回值描述

  返回到二进制类型。当任何输入参数为null时,返回结果为null。

  模范

  示例1:字符串ABC以UTF-8格式编码。命令示例如下。

  选择Encode(“ ABC”,“ UTF-8”);

  -ABC。

  ·is_encoding

  命令格式

  boolean is_encoding(字符串,字符串,字符串)

  命令说明

  确定是否可以将输入字符串str从_encoding从指定的字符集转换为另一个字符集to_encoding。通常,您可以将from_encoding设置为UTF-8,然后将to_encododing设置为GBK。

  参数说明

  str:必须-fill.string类型。可以将空字符串视为属于任何字符集。

  from_encoding,to_encoding:必须填充。弦类型,源和目标字符集。

  返回值描述

  返回到布尔类型。如果可以成功地转换str,返回true,否则返回false。如果任何输入参数为null,则返回null。

  模范

  示例1:确定角色测试或测试是否可以从UTF-8字符集转换为GBK字符集。命令如下。

  选择is_encoding('test','utf-8','gbk');

  - 真实。

  选择is_encoding('test','utf-8','gbk');

  - 真实。

  

  转换功能

  目的

  将字符串从一个字符集转换为任何。

  目的地和源贡献集参数都可以是包含章程名称的颜色或颜色。

  定义为字符集定义的一部分。

  例子

  

  选择convert('?êíííííia b c d e','us7ascii','we8iso88859p1')

  来自双重;

  convert('?íóóóabcde'

  -----------------------------------

  a e i ??A B C D E?

  ['us7ascii'是当前Oracle数据库的字符集,'WE8ISO8859P1'是转换的字符集]

  共同的字符集包括:

  ·us7ascii:US 7位ASCII角色集

  ·WE8DEC:西欧8位角色集

  ·F7DEC:DEC法语7位角色集

  ·WE8EBCDIC500:IBM西欧EBCDIC代码第500页

  ·WE8ISO8859P1:ISO 8859-1西欧8位角色集

  ·UTF8:Unicode 4.0 UTF-8通用字符集,CESU-8符合符合性

  ·AL32UTF8:Unicode 4.0 UTF-8通用字符集

  资料来源:阿里巴巴云。