注册
如何查找数据中的乱码数据
技术分享/ 文章详情 /

如何查找数据中的乱码数据

Laity 2023/03/07 2385 0 0

最近在项目中碰见两次逻辑导出的时候报错:字符串截断
原因:数据中出现乱码,无法逻辑导出
现模拟两次字符串乱码情况,如有更多乱码情况欢迎补充

构造测试数据

1.达梦兼容性参数COMPATIBLE_MODE=4时,需要将参数MY_STRICT_TABLES改为1,如果不修改参数MY_STRICT_TABLES,当插入数据超长时不会报错,会出现截断现象,如果中文被截断就会出现乱码。
模拟:
sp_set_para_value(2,‘COMPATIBLE_MODE’,4);–重启生效
select * from v$dm_ini where PARA_NAME =‘COMPATIBLE_MODE’; --4

CREATE TABLE TEST_TEST(ID INTEGER,NAME VARCHAR(11));
INSERT INTO TEST_TEST VALUES(1,‘我爱我的祖国’);
INSERT INTO TEST_TEST VALUES(2,‘我爱我的家’);
COMMIT;

SELECT * FROM TEST_TEST;
image.png

2.插入ASCII码为\FFFD的数据
INSERT INTO TEST_TEST VALUES(3,UNISTR(‘\FFFD’));
INSERT INTO TEST_TEST VALUES(4,‘我我我’||UNISTR(‘\FFFD’||‘我’));
INSERT INTO TEST_TEST VALUES(5,‘我我’||UNISTR(‘\FFFD’||‘我’));
COMMIT;
SELECT * FROM TEST_TEST;
image.png

针对以上乱码我们该如何找出呢
执行如下语句:
SELECT
*
FROM
TEST_TEST
WHERE
ASCIISTR(NAME) LIKE ‘%\FFFD%’
or lengthb(UNISTR(ASCIISTR(NAME)))<>lengthb(NAME);
image.png
至此,找到问题数据,告知应用进行处理,数据处理后逻辑导出正常。

如果有更加全面的SQL语句也可以分享给我,谢谢!!

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服