位置: 编程技术 - 正文
推荐整理分享SQL Server数据迁移至PostgreSQL出错的解释以及解决方案(sqlserver2008数据迁移),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:sql server的数据如何迁移到mysql,SQL server数据迁移原因,sql数据库迁移,SQL server数据迁移hana数据库表名,sql server的数据如何迁移到mysql,sql server数据文件迁移,SQL server数据迁移hana数据库表名,SQL server数据迁移hana数据库表名,内容如对您有帮助,希望把文章链接给更多的朋友!
问题重现:
1、PG客户端:
2、SQL Server产生数据
然后通过java程序进行获取数据并插入到PG,同样会得到错误信息:
首先我们认为此为gb转化到UTF8时,发生了无法转化的错误。经查UTF8是变长的, 1-6个字节。他的编码规则如下:
Bits Last code point Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 7 U+F 0xxxxxxx U+FF xxxxx xxxxxx U+FFFF xxxx xxxxxx xxxxxx U+1FFFFF xxx xxxxxx xxxxxx xxxxxx U+3FFFFFF xx xxxxxx xxxxxx xxxxxx xxxxxx U+7FFFFFFF x xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx
而0x是符合UTF8规则的。这就使我们非常诧异。然后我们发现有两点继而确认了问题:1、
2、
Terminating character
Indicated by
Tab
t
This is the default field terminator.
Newline character
n
This is the default row terminator.
Carriage return/line feed
r
Backslash1
\
Null terminator (nonvisible terminator)2
Any printable character (control characters are not printable, except null, tab, newline, and carriage return)
(*, A, t, l, and so on)
String of up to printable characters, including some or all of the terminators listed earlier
(**t**, end, !!!!!!!!!!, t—n, and so on)
Source: Server处理是不相同的,所以在这里出现了错误。
而导致这一问题的PG具体代码如下(src/backend/utils/mb/wchar.c的pg_verify_mbstr_len):
report_invalid_encoding函数是将错误信息返回,也就是
invalid byte sequence for encoding "UTF8": 0x而真正导致这一问题的就是:!IS_HIGHBIT_SET(*mbstr)当*mbstr为0x时进入判断,然后进而判断*mbstr是否为,当为时,直接进入函数report_invalid_encoding报错。
所以出现此问题的原因是PG和SQL Server对null的处理是不相同的。
处理方案 :
1、将SQL Server源数据进行修改方法,
2、对应用进行修改,获取到SQL Server数据时,将数据进行转化,和第一种方法异曲同工。
友情链接: 武汉网站建设