varchar,char,varchar2,mybatis查询无返回
1. char类型的长度是固定的,varchar的长度是可变的。
这就表示,存储字符串'abc',使用char(10),表示存储的字符将占10个字节(包括7个空字符)
使用varchar2(10),,则表示只占3个字节,10是最大值,当存储的字符小于10时,按照实际的长度存储。
2.char类型的效率比varchar的效率稍高
3.varchar 与 varchar2的区别
varchar2是oracle开发的一个数据类型。
工业标准的varchar可以存储空字符串,oracle的varchar2还可以存储NULL值,如果想要有向后兼容的能力建议使用varchar2
4.varchar2比char节省空间,但是在效率上比char稍差些。既要获得效率即必须牺牲一点空间,这就是设计上的"以空间换时间"
varchar2虽然比char节省空间,但是一个varchar2列经常被修改,而且每次修改的数据长度不同,这会引起“行迁移的现象”,
而这造成的多余的I/O,是数据库设计中尽量避免的,在这种情况下使用char代替varchar2会更好些。
总结:1. 如果一个字段经常被修改,而且每次修改的数据长度不同,为了效率应当考虑用char定长代替varchar2变长。(列如一个用户的名字经常被修改)
2. 设计的时候尽量考虑 用空间换时间。
nvarchar 和 varchar 的区别是存储方式不同 :
varchar是按字节存储的,而带"n"的nvarchar是按字符存储的。比如说 varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符.
nvarchar(40),就可以存储40个中文字符,也就是说可以存储80个字节长度的字符.nvarchar要相对于存储的字符类型.比如有些字符是占3个字节的。同样的,char和nchar也一样道理。char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值。当你输入的字符大于指定的数时,它会截取超出的字符。varchar是变长型,它的存储空间会跟你输入的实际字符数而改变,但最大长度不能超过你指定的长度。
nvarchar是unicode的变长型,它和char的区别很明显了,它和varchar的区别主要是存储空间大,相同长度下能容内更多的字符。字符集是在安装 SQL Server 时选择的,不能更改。使用 Unicode 数据类型,列可存储由 Unicode 标准定义的任何字符,包含由不同字符集定义的所有字符。Unicode 数据类型需要相当于非 Unicode 数据类型两倍的存储空间。
以前在实际开发中遇到别人把比对状态设置成char(3) 在navicate能查到响应的结果 但是在mybatis中却不能 解决方法、
1 将长度改为1 可能会报错 因为长度变小了
2 trim()函数去空格:
二、深入了解mybatis返回null
抛开mybatis框架,回到原始的jdbc查询,当使用oracle的char类型作为条件查询数据时,只有值完全一样时才能查到数据。
如创建一个测试表:
create table t_user(user_name char(5) ); insert into t_user (user_name)values('sgl');
select '"'||user_name||'"' from t_user
; -- 查询结果为"sgl ",可以看出oracle自动补了两个空格
通过jdbc的PreparedStatement方式查询数据:
conn=getConnection();
ps=conn.prepareStatement("select * from t_user where user_name=?");
ps.setString(1,"sgl");
ResultSet rs = ps.executeQuery();
通过上面方式是无法查到数据的,因为查询条件值”sgl”和数据库中值”sgl “是不相等的。
如果值用“sgl ”可以查到数据
conn=getConnection(); ps=conn.prepareStatement("select * from t_user where user_name=?"); ps.setString(1,"sgl "); -- 增加两个空格不足5位长度 ResultSet rs = ps.executeQuery();
如果使用trim()方式也可以查询到数据,如:
ps=conn.prepareStatement("select * from t_user where trim(user_name)=?"); -- 先对数据库中user_name进行去空格,然后再比较 ps.setString(1,"sgl"); ResultSet rs = ps.executeQuery();
参考博客:https://www.cnblogs.com/xianlei/p/8691643.html
转载于:https://www.cnblogs.com/MyJavaStudy/p/11164425.html
varchar,char,varchar2,mybatis查询无返回相关推荐
- 使用Mybatis查询,返回时间数据没有时分秒 解决方法
在用mybatis查询数据时,发现返回的时间数据只返回了日期,时分秒显示为00:00:00. Oralce的日期类型有很多种,Date ,Timestamp等,那是不是和我xml里面配置的jdbcTy ...
- Mybatis查询中文返回null
一.问题 Spring Boot框架配置Mybatis后,查询数据返回值为null 如图: 二.原因及解决方法 原因: 查询数据时,使用了中文作为查询条件,而中文在查询时会变成乱码,因此查询不到. 解 ...
- 【开源项目笔记:platform-wechat-mall】Mybatis 查询数据库返回部分字段
在本开源项目中数据库操作采用了Mybatis,不美的是查询数据一律返回VO结构,即使只需要其中的一两个字段也如此,更别提多表联合查询时空字段占了90%,需要改进. 本文描述Mybatis如何在单表查询 ...
- MyBatis查询数据返回null
MyBatis查询返回null 可能原因 SQL语句查询条件有问题 数据库中没数据 返回字段与Entity的属性不对应 解决方案 针对 SQL语句查询条件有问题.数据库中没数据 建议将SQL手动拼接之 ...
- mybatis查询数据返回实体对象和返回集合的易错点
在java中,使用mybatis查询数据库中的数据,在返回实体类entity或者List时,当查询的数据在数据库中不存在时,在我们的service层怎么写才是正确的呢? 1.返回类型为实体Entity ...
- mybatis查询数据库返回数据全为null
异常过程 springboot框架加mybatis的整合在查询数据时返回数据正确条数但内容全为null mapper.xml <?xml version="1.0" enco ...
- MyBatis查询,返回值Map或ListMap
https://www.cnblogs.com/xiaoliu66007/p/7908181.html 一.返回值Map 1.mapper.xml [html] view plain copy < ...
- mybatis查询如何返回ListMap类型数据
只要设定resultType而不设定resultMap就可以了: <selectid="selectByPage"parameterType="java.util. ...
- 查看数值类型python_python 查询数据库返回的数据类型
self.conn=MySQLdb.connect(host='localhost',port=3306, user='keystone', passwd='OptValley@4312', db=s ...
- 不敢相信,相同 SQL 下 Mybatis 查询结果和数据库竟然不一样!
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | jianshu.com/p/7c569ca68 ...
最新文章
- Oracle 被 4000 多名女性员工集体诉讼:因薪资比男性每年少 1.3 万美元
- 窗体添加阴影效果如此简单
- 容器,Docker, Kubernetes和Kyma,以及Kyma对SAP的意义
- NOIP模拟测试24「star way to hevaen·lost my music」
- 携手助力新型智慧城市建设和科技创新发展
- 界面设计方法 (2) — 3.卡式, 列表, 主细表, 树形, 页签
- Python使用pytest框架进行单元测试
- 和 Apple “较上劲”了?Google 解决 Cookie 隐私问题上拒绝“一刀切”
- JavaScript:剖析ES6(1)--let和const
- kali局域网扫描ip_kali 扫描局域网的QQ
- 使用反相器的rc振荡电路
- ZXPInstaller for Mac(PS扩展安装器)免费版
- 2021年电工(初级)考试及电工(初级)考试题
- 常用环境测试项目及标准
- 从零学物联网技术:较大影响了我们生活的物联网技术应用有哪些?
- Selenium控制已打开的IE浏览器
- 信息学奥赛一本通高手训练1682:最小字典序
- ZT ---- 给孩子的信(孩子写给爸爸妈妈的信在24、25、26楼)
- python的底层是c_Python的内存管理和垃圾回收机制:基于C语言源码底层深入剖析...
- Navicat迁移表数据 一