KingbaseES数据库导入数据invalid byte sequence for encoding
一、适用版本:
KingbaseES数据库所有版本。
二、问题现象:
使用备份的数据进行还原,还原过程中发生异常。
日志信息:
sys_restore: connecting to database for restore
sys_restore: creating TABLE "public.table_name"
sys_restore: creating COMMENT "public.COLUMN table_name.com_ied_id"
sys_restore: processing data for table "public.table_name"
sys_restore: while PROCESSING TOC:
sys_restore: from TOC entry 8461; 0 71471 TABLE DATA table_name public
sys_restore: error: COPY failed for table "fes_dig": ERROR: invalid byte sequence for encoding "UTF8": 0xe5 0x85 0x7a
CONTEXT: COPY fes_dig, line 52184
sys_restore: creating CONSTRAINT "public.table_name table_name_pkey"
sys_restore: creating INDEX "public.dig_index_pathname"
sys_restore: creating INDEX "public.table_name_index"
主要错误信息:
sys_restore: error: COPY failed for table "fes_dig": ERROR: invalid byte sequence for encoding "UTF8": 0xe5 0x85 0x7a
三、问题排查:
确认备份环境字符集与还原目标数据库主机、数据库字符集一致(还原文件在数据库服务器主机):
1.登录数据库服务器执行以下命令检查:
$ env | grep LANG
LANG=en_US.UTF-8
$ localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
保证备份、还原系统字符集一致。
2.登录数据库检查以下参数:
$ ksql -Usystem -dtest -p5432
ksql (V8.0)
Type "help" for help.
test=# show server_encoding ;
SERVER_ENCODING
-----------------
UTF8
(1 row)
test=# show client_encoding ;
CLIENT_ENCODING
-----------------
UTF8
(1 row)
确认数据库server_encoding、client_encoding跟备份环境的字符集一致。
3.在系统查询文件编码:
$ file -i 文件名
xx.xx: text/plain; charset=utf-8
确保文件charset跟还原数据库字符集一致。
4.查询文件内容是否有乱码或者无效字符:
linux系统:使用vim、cat、less、more进行文件内容查看:
$ cat fes_dig.sql |grep -i 721279627966801
匹配到二进制文件 (标准输入)
$ cat fes_dig.sql |grep -a 721279627966801
721279627966801 1 0 41 41 1 #A套检修压板投入开入_Z.开▒zzz 1103000000000929161
如上,尽量使用vim、cat、less、more..等4条命令分别查询文件内容,看看是否存在乱码或者无效的数据。
windows系统:使用Notpad++类似的工具进行文件内容查看:
#A套检修压板投入开入_Z.开▒zzz
XE5X85
如上,确保文件内容里面不包含以上示例无效数据。
四、问题解决:
场景1:备份库系统字符集与数据库字符集不一致:
解决方法:修改备份库系统字符集与数据库字符集一致,重新备份然后再进行还原。
场景2:还原目标库系统字符集与数据库字符集不一致:
解决方法:修改还原目标库系统字符集与数据库字符集一致,重新进行还原。
场景3:备份文件字符集与数据库字符集不一致:
备份文件是普通的文本文件,通过ftp、scp...传输后字符集发生变化
解决方法:备份的时候指定备份文件格式为二进制格式或者选择正确的传输模式。
注意:ftp传输模式有两种:ASCII模式和二进制模式:
1.ASCII模式是将文件以文本的形式传输,每次传输一个字符。这种模式适合传输普通的文本文件,如txt、html、xml等,因为它可以根据不同的操作系统自动调整换行符和回车符。
2.二进制模式是将文件以二进制的形式传输,因为二进制传输可以保持文件的原始格式和内容。
使用错误的传输模式,可能会导致以下问题:
1.如用ASCII模式传输二进制文件,可能会丢失一些重要的字节信息;
2.如果用二进制模式传输文本文件,可能会出现换行符和回车符不匹配的问题。
因此在使用ftp命令进行文件传输时,需要根据文件的类型选择合适的传输模式。
默认情况下,ftp命令使用ASCII模式进行传输。如果要切换到二进制模式,可以在ftp命令后输入binary命令。
场景4:文件内容出现乱码或者无效字符:
1.文件内容出现乱码:
解决方法:尝试使用以下命令进行文件字符集转换。
iconv -f utf-8(源字符集) -t utf-8(目标字符集) 文件 > 新的文件
如果使用以上方法文件内容依旧存在乱码可能的原因如下:
数据库字符集与系统字符集不一致,由于此问题导致在备份过程中数据产生乱码。
解决方法:参考问题解决场景1。
使用了错误的传输模式导致文件在传输过程中出现损坏或者丢失了重要的字节信息。
解决方法:参考问题解决场景3。
2.文件内容出现无效字符:参考问题排查4
解决方法:尝试使用以下命令忽略无效的字符,然后重新导入。
iconv -c -f utf-8(源字符集) -t utf-8(目标字符集) 文件 > 新的文件
场景5:程序在写入数据的时候对数据进行了截断产生无效字符:
解决方法:尝试使用以下命令对程序写入数据进行截断导致产生无效字符的处理。
iconv -f utf-8(源字符集) -t utf-8(目标字符集) 文件 > 新的文件
如果是由于程序写入数据时对数据进行截断产生无效字符,需要程序这边进行处理,保证写入数据的完整性。
KingbaseES数据库导入数据invalid byte sequence for encoding的更多相关文章
- ERROR: invalid byte sequence for encoding "UTF8": 0x00
1.使用kettle批量导入数据的时候,数据出现了下面的错误.ERROR: invalid byte sequence for encoding "UTF8": 0x00 关键点: ...
- PostgreSQL copy 时提示:ERROR: invalid byte sequence for encoding "UTF8": 0xb3
测试时使用三种文件格式: ISO-8859 Netpbm PBM image ASCII if [ $(file $filename|grep -c "ISO-8859") -gt ...
- invalid byte sequence for encoding "UTF8": 0xe99d2c
服务器还原数据库数据出错,老规矩... 字符集编码的问题 http://blog.csdn.net/beiigang/article/details/39582583 over....
- Sqlserver 2005 跨数据库 导入数据
--Sqlserver 2005 跨数据库 导入数据:--SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/O ...
- CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法
CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法: 基本可以确定是Podfile中的内容编码有 ...
- MYSQL数据库导入数据时出现乱码的解决办法
我的一个网站在负载搞不定的情况下最终选择了数据库和程序分离的方式解决的高负载,但是再导入数据的时候出现了大量乱码,最终通过方法二解决掉导入数据的问题,后面再设计网站布局的时候数据库跟网站程序分离是个很 ...
- solr8.0 从数据库导入数据(三)
第一步:导入相关包: 在创建的核心目录下新建lib文件夹(如果有,无需建立),从Solr源码包的dist文件夹中导入两个solr-dataimporthandler包,以及一个mysql驱动包. 第二 ...
- 记录一次向TiDB数据库导入数据的例子
导出数据 今天从Mysql的某个库中导出一个表大概有20分钟吧,等了一会终于导出成功了.查看一下文件的大小: [tidb@:vg_adn_CkhsTest ~]$du -h ./creative_ou ...
- 在C#应用程序中,利用表值参数过滤重复,批量向数据库导入数据,并且返回重复数据
在很多情况下,应用程序都需要实现excel数据导入功能,数据如果只有几十条,或上百条,甚至上千条,速度还好. 但是不仅如此,如果客户提供给你的excel本身存在着重复数据,或是excel中的某些数据已 ...
- Tidb数据库导入数据出现oom问题
今天使用insert操作向tidb中插入数据,发现正在导入的过程中出现如下错误: mysql: [Warning] Using a password on the command line inter ...
随机推荐
- 【OpenGL ES】渐变凸镜贴图
1 前言 正方形图片贴到圆形上 中将正方形图片上的纹理映射到圆形模型上,凸镜贴图 中介绍了将圆形图片上的纹理映射到凸镜模型上.如果将原图片逐渐变为凸镜效果,中间的变化过程又是什么样的? 图片的 ...
- Mysql一张表可以存储多少数据
Mysql一张表可以存储多少数据 在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小4KB.同样的在MySQL中为了提高吞吐率,数据也是分页的,不过MySQL的数据页大小是16KB.(确切 ...
- JAVA对象的生命周期(二)-对象的创建
目录 对象创建的几种方式 类加载检查. 内存分配 初始化零值 设置对象头 执行init方法 对象创建的几种方式 new clone newInstance 反序列化 String s = " ...
- 【Azure Developer】PHP网站使用AAD授权登录的参考示例
问题描述 如果有个PHP网站,需要使用AAD授权登录,有没有PHP代码实例 可供参考呢? 参考代码 参考一篇博文(Single sign-on with Azure AD in PHP),学习使用SS ...
- 【工具】用nvm管理nodejs版本切换,真香!
前言 缘由 换个nodejs版本比换个媳妇还难,nvm堪称管理nodejs版本神器 事情的起因,公司的一些老项目需要依赖稳定老版本的nodejs,但是自己的一些项目所需要的是更高版本的nodejs,这 ...
- 4、 mysql的explain分析执行计划
EXPLAIN或者 DESC命令获取 MySQL如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序. 查询SQL语句的执行计划 : explain sele ...
- 基于STM32F407MAC与DP83848实现以太网通讯四(STM32F407MAC数据收发与DMA描述符)
上一章实现的MAC数据包的基础收发功能,但是只是简单的操作了ETH外设的收发包函数并没有深入了解其中的原理逻辑,本章结合STM32F40x文档与STM32F4x7_ETH_Driver驱动库了解MAC ...
- 本地画板工具 Axure RP 9 顶替 drawio (补充Axure RP 8)
本地画板工具 Axure RP 9 顶替 drawio 外链:https://wws.lanzoul.com/b03paemkf 密码:dmvj 9这个版本 win7 不支持 Axure RP 8 h ...
- .bat 批处理 手册 教程
有时候bat写个脚本 还是挺方便的,网上也没有不错的手册,有时间再整理看吧.网上找几个,先留存. 系统变量 %USERPROFILE% https://blog.csdn.net/ztx114/art ...
- Windows逆向之配置虚拟机环境
安装虚拟机环境 首先下载吾爱破解论坛专用版虚拟机软件VMWare Workstation 12,注册成功:再通过虚拟机启动论坛提供的WinXP系统镜像,在我的win11上完美运行. 实现文件互传 为了 ...