联合主键NULL值过多,ON DUPLICATE KEY UPDATE不更新的问题

近来遇到一个问题,一个数据保存接口。两处调用,一处在联合主键相同是总是更新数据,一处在联合主键相同时却新增了一条。

排查发现:

  1. 联合主键多大十几个,且其中有几个字段是没有值的;
  2. 更新数据的调用方将空值使用''代替;
  3. 新增数据的调用方空值使用NULL代替;

故得出结论:

  1. mysql某些版本,某些配置下,联合主键空值过多,会导致ON DUPLICATE KEY UPDATE不更新,与主观看法产生矛盾;
  2. 不是有NULL值就不更新,具体还要看实际情况;
  3. 建议在插入时替代NULL值。