在数字周围使用单引号时查询错误

时间:2018-04-23 09:16:28

标签: syntax-error mariadb

mariadb中的查询返回错误结果。 重现问题:

创建下表:

CREATE TABLE test_table (
  ID int(4) NOT NULL AUTO_INCREMENT,
  test_field double(20,2) DEFAULT NULL,
  PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

插入一些值:

INSERT INTO test_table VALUES ('1', '1.12');

INSERT INTO test_table VALUES ('2', '1.13');

INSERT INTO test_table VALUES ('3', '1.14');

INSERT INTO test_table VALUES ('4', '1.15');

INSERT INTO test_table VALUES ('5', '2.24');

运行此查询:

SELECT test_field FROM test_table WHERE test_field = '1.14'

Maria db返回没有

如果我使用'1.13'代替'1.14',则mariadb会正确返回一条记录。

据我所知,我不应该在值周围使用单引号,但我希望结果是正确的,因为单引号不是伪造的。这似乎是一种类型铸造问题,我认为它必须解决。

1 个答案:

答案 0 :(得分:0)

在<{1}}或(m,n) 使用DOUBLE。它导致额外的舍入。

由于FLOATDOUBLE不是精确的十进制数,因此将FLOATDOUBLE进行比较是愚蠢的。

DECIMAL转换为二进制。但是当转换回小数时,你会得到接近1.14的东西。

结论:不要使用1.1400000000000001来测试=DOUBLE值。并且不要与FLOAT一起使用。