MYsql将int加入到varchar(未按预期工作)

时间:2017-04-28 16:56:58

标签: mysql join type-conversion

select  b.*, a.id_order 
FROM trans a 
INNER JOIN shipment b
   ON a.id_order = b.trans_order_id 

即使两列的值都不同,它仍然会加入该行。 例如,下面是奇怪的组合  trans_order_id= "6229582 8481 AB"id_order ='6229582' 两个值都不相同,但MySQL仍然让他们加入

两个列都具有不同的数据类型

b.trans_order_id  varchar(45)
a.id_order int(10)

我尝试过Cast,转换(No Use)

请帮助我告诉我是否有任何解决此类问题的方法。

1 个答案:

答案 0 :(得分:0)

那是你的MySql:/

我的猜测trans.id_order有某种类型的数字类型,而MySql正在静默地将shipment.trans_order_id从字符串类型转换为连接比较的数字类型。

除了MySql之外,几乎没有其他数据库可以尝试这一点,我相信新安装 5.7之后的默认行为也可以更好地处理这个问题,但即使您运行的是最新的8.01如果数据库是原始安装的,那么你会看到这个,然后从5.7之前的版本升级。

您可以通过将a.id_order显式地转换为shipment.trans_order_id中使用的任何varchar类型来避免这种情况,这样MySql就不会强制表达式的错误一面。

您可能在shipment表格上设置了较差的架构设计,您尝试将多个值放入一个列中。