今天查问题遇到sqlserver数据库中一张表里本来插入的数据为空但是变成了空格的问题。
刚开始考虑是因为程序逻辑有问题,检查了代码后没有异常,总共有a,b,c三个字段,都是同样的逻辑。a就是空格,b,c是空
开始从数据库方面下手查问题,首先查看空格在字段中的位置
因为sqlserver在编译sql语句时会自动将a='',和a=' '编译为同样的'',会自动去掉前置空格
因此使用a=' ' 去判断空格是无效的
后面想要用len函数来判断,但是len会去掉空格,Datalength来判断字段里的字节数
两者具体区别请参考https://blog.csdn.net/whaxrl/article/details/49659117
select CHARINDEX (' ', a),* from table where isActivated = 1 and a= ' '
CHARINDEX (' ', a)的作用是查看空格在a中位置
发现都是字段中确实有空格。
这时突然想起来之前看看数据库设计时,看到a是char类型,b和c都是varchar类型
才发现a设置了char的长度为2,数据库再存储时会用空格自动补齐长度,所以其实a是两个空格
微信公众号:二虎程序