2023年8月

背景: 执行mysql语句报错, Truncated incorrect DOUBLE value.
这是个非常奇怪的报错.因为实际错误和提示的并没啥关系,所以你很容易懵了,被提示误导.

这个错误经常是发生在UPDATE语句中

  • 原因1: 你将一个不能用数字表示的字符串与数字比较在where语句中. 原因是和数字比价时,mysql会字符串先转换为数字,转的时候出错就会报这个错. 如下

    UPDATE students 
    SET score = 5
    WHERE student_id = 87463298107;//student_id为字符串类型,存的值有数字或者英文字母, 所以当比到包含英文字母的行时就会出错
    • 解决方法: 字段什么类型就和什么类型值比较.改后如下

      UPDATE students 
      SET score = 5
      WHERE student_id = '87463298107';

      有趣的是,同样的where从句放在select语句中,能执行并不会报错.

  • 还有种错误是语法错误

    UPDATE students 
    SET name = 'Sarah' 
      AND score = 9
    WHERE id = '1';

    会报错ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'Sarah'. 你可能会被误导是Sarah值是不是有什么问题.然而其实和他并没关系.
    实际错误是语法错误, update多个值不是用and连接而是要将and替换成,.如下

    UPDATE students 
    SET name = 'Sarah',
      score = 9
    WHERE id = '1';

ref: https://sebhastian.com/mysql-truncated-incorrect-double-value/