关于Java和SQL交互时的ResultSet.getString(“ Column ”)函数的自动补空格问题

下面这一段是复制的别人的:

今天发现从oracle中查询出的中文字符串数据,在插入mysql后有空格,情况如下:
1、现象
select '测试' name from dual;
该语句执行后,ResultSet.getString("name")的结果是:'测试  '
即后面多了空格,很不理解,这个列是写在sql语句中的字符串常量,没有表中的字段与其对应,那为啥会自动补空格呢?补多少?依据是啥?
2、分析
google一段时间,发现csdn上有人也遇到了这个问题,其中一个人回答的是数据库问题。
况且这段程序以前是没有这个问题,在我本地重构后才出现的,而这段代码是一样的。结合上面情况,猜测是oracle驱动的问题。
3、测试
换回原来的驱动jar包,结果就不再多空格了。
4、结论
驱动和版本应该使用配套的最好。

我自己用的SQL2008测试的时候也是从数据库中运用ResultSet.getString()方法查询的相应列放到JTextFiled中显示,用的setText()方法,我又用正则表达式检测一下发现居然返回false,但是如果手动在setText()设置同样的内容却返回true......打印出来发现ResultSet.getString()居然有空格。
之后用的resultSet.getString("Customercard").trim();才把后面的空格去掉。好坑啊!


在网上搜了一下:

原因如下:
char,存储非unicode数据类型字符,他是固定长度数据类型,比如char(10)即使没有满10个字符,他会用空格补齐10个字符
nchar,varchar,nvarchar,这三个都是存储unicode数据类型字符
nchar最多可以存储4000个字符(无论是英文还是汉字)
varchar 他是可变长数据类型,varchar(10)他是以实际的字符长度+1
nvarchar这个也是可变长数据类型他跟nchar一样最多也只能存储4000个字符,
char跟varchar最多能存储8000和英文,4000个汉字
所以一般来说有中文字符用nchar跟nvarchar,如果是村数字跟英文就用char跟varchar。

就出在数据类型的问题上,char(10)如果存入的数据不足10字节长度,就会自动用空格补全,而其他类型则不会。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值