最近在项目中碰见两次逻辑导出的时候报错:字符串截断
原因:数据中出现乱码,无法逻辑导出
现模拟两次字符串乱码情况,如有更多乱码情况欢迎补充
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;
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;
针对以上乱码我们该如何找出呢
执行如下语句:
SELECT
*
FROM
TEST_TEST
WHERE
ASCIISTR(NAME) LIKE ‘%\FFFD%’
or lengthb(UNISTR(ASCIISTR(NAME)))<>lengthb(NAME);
至此,找到问题数据,告知应用进行处理,数据处理后逻辑导出正常。
如果有更加全面的SQL语句也可以分享给我,谢谢!!
文章
阅读量
获赞