MySQL——字段包含tab、空格、换行等控制字符导致查不到数据

处理三方数据要小心,以防掉入坑中难以自拔。

最近在做一个数据核验的工作,从三方平台拿到数据(CSV文件)。将其导入数据库以便与底层数据进行比对,然而在执行SQL语句时却发现查不到内容,显然超出了预期。
具体问题如下:

使用该条语句能够查到结果

select * from t1 where t1.`主订单编号` = 4818838755045564053

使用本条数据查不到结果

select * from t1 where t1.`主订单编号` = "4818838755045564053"

说明:t1.主订单编号的数据类型为text。我使用的工具是Navicat,其在执行查询语句是会自动进行类型转换;换句话说:SQL中传入的参数是数字还是字符串都不会影响查询结果。所以理论上来说以上两条语句是等价的,但是实际运行结果却完全不同。
于是开始排查问题所在,首先想到问题应该是出在t1这个表上面,可能是因为“主订单编号”中包含了一些不可见的控制字符导致的。

  1. 先是将三方给的CSV文件进行详细检查了一遍,发现“主订单编号”的值确实存在一个莫名的空格,而且可以删除。然后又到数据库中查看,果然根据该CSV文件导入进来的t1表也是同样的问题。
  2. 使用replace函数将数据进行替换
update t1
set `主订单编号` = replace(`主订单编号`,"	","");

replace(String,str1,str2)函数可以将String中出现的所有str1字段全部替换成str2字段

  1. 修改过之后就发现可以进行正常查询了

尤其是在处理三方给过来的数据时,可能数据不是很干净,会包含一些控制字符给我们带来麻烦;因此我们在进行数据校验时一定要仔细,遇到问题理性分析。

你可能感兴趣的:(数据库技术,数据库,mysql,字符串,sql)