背景
测试跟我说,他导入了数据,但是我并没有将数据显示出来。于是我把语句抓了出来,就两个表关联查询数据,我用了left join但是就是没有数据,但两个表单独查询又都有数据,简直见鬼了。其实这种情况,一般就是数据里多了空格之类的。但是我两个表的唯一标识是一样的,就这么一个关联条件,居然还这样,真是够了。
问题
-- a,b 可以理解为Table1,Table2的外号
-- id是a,b表的栏位名称,且两边数据都相等
-- left join...on...去看看数据库的笛卡尔积吧
select b.* from table1 a left join table2 b on a.id=b.id;
CHAR和VARCHAR
后面经发现,确实是数据有问题,但是关键是数据里有空格,可即便这样我用没有空格的查询条件能查出来,用加了空格的也能,就是系统自带把后面的空格去掉了。
一个表建的是CHAR类型,一个是VARCHAR类型的,char类型的查询就自动把后面的屏蔽还是怎么的,反正就是能查出来。
char类型的数据,我建了长度17,但实际值只有16位(有的也有17位),后一位就补空格了;但是VARCHAR不会给你补空格,将长度全占满。
总结
如果你的数据长度是固定的,且跟建的栏位长度也是相同的,用CHAR就不会有什么问题,但是你要是不一致,还是用VARCHAR还是VARCHAR2来着,都可以。据说 CHAR和VARCHAR之间有点性能差距,但对我这种能用的人来说,过多的追求性能,可能会导致一堆bug。不过以后慢慢学习。