我第一眼看成了 count 列与其值不匹配,但找了一圈发现,表里并没有 count 这个字段。就怀疑自己猜错意思了。百度搜了一下,意思是SQL语句里列的数目和后面的值的数目不一致。

然后找到几种基本的错误原因和解决方案:

  • 插入列的字段数量是否和值的数量一致(未省略列名的情况)
  • 除有自增长或主键的列的值可以省略以外,其他列值应该全部按顺序列出(省略列名的情况)
  • 在列名或者值域有中文字符,空格,或者其他特殊字符

最后一种情况稍微看一下就能排除,我是用 navicat 导出的,格式一致无误。

第一种情况也是没有的,因为我省略了列名,直接 insert into table_name values(...)

当时的解决方案是,把省略的列名补充好,然后执行就没问题了。

事后分析原因,觉得不应该是省略列名本身的问题。然后顺序也不会有问题,因为那些除ID之外的所有列名,完全是通过 sql 从数据库中导出来的。

仔细查看发现确实除主键外,还少了一个字段。原来是我在线上导出的列名,而在本地执行的 insert 语句。本地数据库确实比线上的数据库多一个字段,查询安装时的 sql,创建表的 sql 就是多了那个字段,至于为什么多,现在还是不太清楚。