暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【磐维数据库】trim()函数返回null而非空值处理

钟一 5天前
27

适用范围

panweidb2.0 所有版本

概念介绍

TRIM 函数在 panweidb中用于从字符串中删除指定的字符(默认为空格)

相关参数介绍

behavior_compat_options 是一个字符串类型的参数,通常以逗号分隔的形式列出多个选项。每个选项对应某种行为的兼容性调整。通过设置这些选项,可以改变 panweidb的默认行为,使其更符合用户的需求或与目标系统的预期一致。

背景说明或问题现象

用户在执行sql时使用了函数trim( ),结果返回中:在gsql客户端显示空值,在dbeaver返回的是null值,返回结果不符合预期,用户的程序会认为null是一个具体的值而不是空值。

定位分析

  1. 先了解trim()函数的作用和使用方式
  2. 在了解函数的作用后,开始进行测试,尝试复现问题,若无法复现问题,可联系客户直接查看问题
    • 本地环境登录数据库执行sql查看是否有问题
    • dbeaver连接数据库执行sql查看是否有问题
    • 对比gsql和dbeaver的查看结果,从而判断问题是出现在数据库层面还是工具层面
  3. 复现问题后,开始尝试解决问题
    • 可以在网上查找是否有相关案例
    • 可以在寻求磐维值班人员协助处理
  4. 找到解决方案后,先在本地环境操作测试方案是否可行
  5. 测试方案通过后给用户反馈

解决方案或优化方案

-- 执行参数修改解决 gs_guc reload -D $PGDATA -c "behavior_compat_options='reduce_tailing_zero,skip_insert_gs_source,select_into_return_null,accept_empty_str'"
复制

示例说明

  1. 创建测试用例

    create table test_0328(id int,name varchar2(50));
    复制
  2. 插入带不同空格的数据

    insert into public.test_0328 values (1,' '),(2,'zxl'),(3,'qq '),(11,' b v '),(33,' yr '),(999,' hk');
    复制
  3. 复现问题

    查询当前数据

    select * from public.test_0328;
    复制

    image20250328105508577.png

    分别在gsql和dbeaver执行带trim()函数的sql

    -- 在gsql执行,返回的是空值 SELECT id,TRIM(name) from public.test_0328 t;
    复制

    image20250328105817419.png

    -- 在dbeaver执行复现了问题,返回的是null值
    复制

    image20250328110244797.png

  4. 验证解决方案

    -- 查看当前的结果 SELECT id,TRIM(name) from public.test_0328 t; -- 查看当前的参数 show behavior_compat_options; -- 设置当前会话参数 set behavior_compat_options='reduce_tailing_zero,skip_insert_gs_source,select_into_return_null,accept_empty_str' -- 验证是否解决 SELECT id,TRIM(name) from public.test_0328 t;
    复制

    image20250328110415728.png

    image20250328110503949.png

    image20250328110542171.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论