栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

oracle保存中文字符串超出长度问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

oracle保存中文字符串超出长度问题

oracle保存中文字符串超出长度问题
  • 问题阐述
  • 解决问题
  • 字符很长的场景

问题阐述

1、有一个包含中文的字符串,使用java 的substring截取后长度为10例如:

String str = "ab你好cd你好asdfg";
str = str .substring(0,10);
str截取后的值为:ab你好cd你好as

2、此时将str保存到一个类型为varchar2(10) 的字段中 会报错:超出字符长度。实际字符长度为18。

解决问题

1、为什么会出现上面的问题
因为:中文在UTF-8 编码中占用三个字节,而在GBK编码中占用2个字节。

2、解决问题

    public static String subStrUTF8(String string, int num){
        int len = string.getBytes(StandardCharsets.UTF_8).length;
        if(len > num){
            string = string.substring(0, string.length() - 1);
            string = subStrUTF8(string,num);
        }
        return string;
    }

3、调用subStrUTF8解决截取的问题。
示例:

        String str = "ab你好cd你好asdfg";
        System.out.println(subStrUTF8(str,10));
        结果为:ab你好cd
字符很长的场景

需求描述: 5000个字符(含有中文),保留前2000位;
如果直接用上面的递归一个一个的截取是不是很耗时。
可以使用如下方式减少截取次数:

    public static String substr(String s, int num) {
        if (StringUtils.isBlank(s)) {
            return "";
        }
        if (num > s.length()) {
            return s;
        }
        s = s.substring(0, num);
        return subStrUTF8(s, num);
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862482.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号