LightDB23.4 GBK和UTF8转码失败的字符替换成空格

背景介绍

用户使用迁移工具从Oracle数据库迁移数据到LightDB的过程中发现,某些GBK编码转成UTF8编码后,在插入到LightDB中会报错。以GBK编码AAA1为例,LightDB的GBK和UTF8映射表中不支持AAA1这个GBK编码的转换。不支持的GBK编码都是处于GBK编码的自定义区间。

在上图中,UTF8编码EE8080对应于GBK编码AAA1,插入到LightDB时报错。

所以,在LightDB23.4中,将GBK和UTF8转码失败的字符替换成空格。只有在客户端和服务端编码不一致,且需要GBK和UTF8之间转码的时候,这个功能才生效。

功能示例

客户端编码GBK,服务端编码UTF8
  1. 建表,插入数据
powershell 复制代码
lightdb@postgres=# \c lt_test
You are now connected to database "lt_test" as user "lightdb".
compatible type: postgresql
lightdb@lt_test=# 
lightdb@lt_test=# 
lightdb@lt_test=# create table t1(cont text);
CREATE TABLE
lightdb@lt_test=# 
lightdb@lt_test=# 
lightdb@lt_test=# show server_encoding ;
 server_encoding 
-----------------
 UTF8
(1 row)

lightdb@lt_test=# 
lightdb@lt_test=# \encoding gbk
lightdb@lt_test=# 
lightdb@lt_test=# \i gbk.test 
INSERT 0 1
lightdb@lt_test=# 
lightdb@lt_test=# select * from t1;
 cont  
-------
 我 们
(1 row)

lightdb@lt_test=# select oid,datname from pg_database where datname = 'lt_test';
  oid  | datname 
-------+---------
 25485 | lt_test
(1 row)

lightdb@lt_test=# 
lightdb@lt_test=# select oid,relfilenode from pg_class where relname = 't1';
  oid  | relfilenode 
-------+-------------
 25486 |       25486
(1 row)

lightdb@lt_test=# checkpoint ;
CHECKPOINT
lightdb@lt_test=# 
lightdb@lt_test=# select oid,relfilenode from pg_class where relname = 't1';
  oid  | relfilenode 
-------+-------------
 25486 |       25486
(1 row)

lightdb@lt_test=# 
  1. gbk.test文件中的内容

  2. 查看实际表文件中的数据, e6 88 91 20 e4 bb ace6 88 91表示我,e4 bb ac表示们,中间的20就是转换后的空格

powershell 复制代码
[lightdb@localhost 25485]$ hexdump -C 25486
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00002000
[lightdb@localhost 25485]$ hexdump -C 25486
00000000  00 00 00 00 f0 a9 0c 22  00 00 00 00 1c 00 e0 1f  |......."........|
00000010  00 20 04 20 00 00 00 00  e0 9f 40 00 00 00 00 00  |. . ......@.....|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00001fe0  07 05 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00001ff0  01 00 01 00 02 09 18 00  11 e6 88 91 20 e4 bb ac  |............ ...|
00002000
[lightdb@localhost 25485]$ 
相关推荐
千维百策66610 小时前
SRE 中如何消除琐务:提升工程效率与服务可靠性的实践方法
数据库
卓怡学长11 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
名不经传的养虾人11 小时前
从0到1:企业级AI项目迭代日记 Vol.65|最危险的故障不是崩溃,是悄悄换掉了正确答案
数据库·人工智能·ai编程·ai-agent·企业ai
程序员佳佳11 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
绩隐金11 小时前
用AI开了本小说 九折归潮
数据库
heimeiyingwang11 小时前
【架构实战】MySQL索引优化:从慢查询到毫秒响应
数据库·mysql·架构
得闲喝茶11 小时前
跨表数据匹配——VLOOKUP、XLOOKUP
大数据·数据库·笔记·信息可视化·数据分析·excel
snow@li12 小时前
数据库:如何设计最佳索引 / 数据库最佳索引设计指南
数据库
渣渣灰飞12 小时前
MySQL 系统学习 第二阶段 第四章:DCL(Data Control Language)第二节:权限管理与角色(Role)
数据库·学习·mysql
肖永威12 小时前
金仓数据库麒麟环境SQL终端使用入门实践(增删改查篇)
数据库·sql·金仓数据库