首页 > 数据库 >中电金信:技术实践|异构数据库迁移之“痛”

中电金信:技术实践|异构数据库迁移之“痛”

时间:2023-07-14 23:32:55浏览次数:34  
标签:异构 转换 字节 数据库 字符集 校验 金信 迁移

导语:

近几年,国产化创新潮流席卷全国,异构数据库迁移成了不少同行、客户争相讨论的话题,大家或争论方案、或求解答疑、或讨论产品,总之问题林林总总,涉及的面还很多,笔者也在近期的几个项目中做了几个异构数据库迁移的项目,项目过后感觉大家最感兴趣的还是异构数据库迁移有哪些注意事项,所以闲暇期间把自己做的一些项目中遇到的问题总结下来,供大家参考借鉴。

一、字符集转换问题

目前做字符集转换的工具不少,有操作系统自带的,也有各种脚本语言、高级语言自带的函数库,然而在进行跨字符集转换过程中其实有很多陷阱。通常,常用的字符集转换多数是GBK、GB2312、CP936、UTF8、UNICODE、LATIN等常用字符集之间的互相转换。因此,遇到不同字符集迁移的项目,建议还是要以实际项目情况出发合理选择方案。以下是笔者在处理不同字符集转换的几点建议:

■中文字段值域范围问题

中文不同的字符集按其编码规范占用的字节数并不一致,如GBK字符集下中文一个汉字占2字节,而UTF8字符集为3字节(少数占用4个字节)。此种情况下需要在模型设计过程中做好值域范围的调整,防止数据加工时报错。

■中文乱码问题

中文乱码是大家经常碰到的问题,多数是因为不同字符集覆盖范围不同,不同字符集在做转换时,因源和目标映射不对称,转码程序通常采用舍去不能转换的字符,或将其转换为预先指定的字符,此种情况下导致转换后的部分结果是乱码。以下为常用字符集范围及编码规范:

GB2312字符集   

作用:国家简体中文字符集,兼容ASCII

位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,涵盖所有常用汉字

范围:高字节从A1到F7, 低字节从A1到FE

BIG5字符集

作用:统一繁体字编码

位数:使用2个字节表示,总计13053个汉字

范围:高字节从A1到F9,低字节从40到7E,A1到FE

GBK字符集

作用:它是GB2312的扩展,加入对繁体字的支持,兼容GB2312

位数:使用2个字节表示,可表示21886个字符

范围:高字节从81到FE,低字节从40到FE (7F 除外)


GB18030字符集
作用:它解决了中文、日文、朝鲜语等的编码,兼容GBK

位数:它采用变字节表示(1 ASCII,2,4字节)。可表示27484个文字

范围:1字节从00到7F; 2字节高字节从81到FE,低字节从40到7E和80到FE;4字节第一三字节从81到FE,第二四字节从30到39


UNICODE字符集
作用:为世界650种语言进行统一编码,兼容ISO-8859-1

位数:UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16和UTF-32

范围:UNICODE中文字符范围是[U+4E00-U+9FBF],常用范围是[U+4E00-U+9FA5]

▲上下滑动查看



■ 转码处理策略

转码处理策略主要是指转码过程中对于异常字符的处理方式,通常在指定完目标字符集后对于异常字符的处理方式有3种:

标签:异构,转换,字节,数据库,字符集,校验,金信,迁移
From: https://blog.51cto.com/u_15430715/6727672

相关文章

  • 快速离线安装MySql数据库
    一、mysal压缩文件通过ftp放入\opt-->解压cd/opttar-xzvfmysql-5.7.29-linux-glibc2.12-×86_64.tar.gz二、移动一>创建data目录一>创建用户组mvmysql-5.7.29-linux-glibc2.12-×86_64/usr/localcd/usr/localmvmysql-5.7.29-linux-glibc2.12-×86_64mysqlcd......
  • Mac下的数据库设计工具 Workbench
    Workbench制造商:SunSystems/Oracle网站:http://dev.mysql.com/downloads/workbench/价格:免费许可证:GPLLicense支持平台:MicrosoftWindows,MacOSX,LinuxMySQLWorkbench是一款图形化的数据库设计工具,它在一个开发环境中集成了SQL的开发,管理,数据库设计,创建以及维护。它是fabFORCE.n......
  • mysql数据库3 表关系/多表查询等
    表关系(外键)#外键的前戏建立一张表:emp"""1.表不清晰,现在到底是员工表还是部门表2.字段需要重复的写,浪费资源3.兼容性很差,牵一发而动全身(这个问题是最不能容忍的)"""#以上问题该如何解决呢?我们的思路是,把一张表拆分成两张表拆成emp和depart部门表......
  • windows下用mysqldump导出数据库中文乱码的解决方案
    解决方案是从这篇文章得到的启发:http://www.pcxitongcheng.com/server/anz/2022-12-06/33622.html先去mysql里确认字符编码是utf8:showvariableslike'%char%'主要确认character_set_results。先创建好sql文件,比如d:\backup.sql然后备份的时候用--result-file=指定刚创建的文......
  • oracle数据库表常用分区创建
    按年进行分区createtabletest_part(IDNUMBER(20)notnull,REMARKVARCHAR2(1000),create_timeDATE)PARTITIONBYRANGE(CREATE_TIME)INTERVAL(numtoyminterval(1,'year'))(partitionpart_t01valueslessthan(to_date('2018-11-01','yyy......
  • 数据库了解及部分掌握
    sql注入问题sql注入原因是由于特殊符号的组合会产生特殊的效果,实际生活中,尤其是在注册用户名时,会明显提示很多特殊符号不能使用,原因一样,设计到敏感数据部分,不要自己拼接,交给现成的方法拼接即可。利用一些语法的特性书写一些特点的语句实现固定的语法MySQL利用的是MySQL的注释语......
  • 13-数据库安全
    Mssql数据库mssql安全性概述:就是用来保护数据,可以决定哪些用户可以登录到服务器,用户可以对哪些数据库执行操作或管理任务等。他的安全体系结构顺序上可以分为“认证”“授权两个部分”,安全机制可以分为5个层级。客户端、网络传输,实例级别,数据库级别、对象级别五个层级安全机......
  • IoT 场景下 TDengine 与老牌时序数据库怎么选?看看这份TSBS报告
    上周一,TDengine正式发布了IoT场景下基于TSBS的时序数据库(TimeSeriesDatabase,TSDB)性能基准测试报告。该报告模拟虚拟货运公司车队中一组卡车的时序数据,预设了五种卡车规模场景,在相同的AWS云环境下运行了TDengine3.0、TimescaleDB2.10.1和InfluxDB1.8.10,从四大维度进......
  • python之数据库:SQL注入问题,视图,触发器,事务,存储过程,函数,流程控制,索引,慢查询
    SQL注入问题(了解现象)importpymysql#连接MySQL服务端conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123',database='db8_3',charset='utf8',autocommit=True#......
  • Clickhouse、Mysql、Presto数据库解析Json数据
    一、Clickhouse解析Json1、visitParamExtractBool(json,name)→提取json中的name字段,返回UInt8,0或1  例:visitParamExtractBool('{"name":true}','name')ASbool2、visitParamExtractInt(json,name)→提取json中的name字段,返回Int型的值  例:visitParamExtractInt......