我有一个简单的表,称为 feed
id | 价格 |
---|---|
1 | 20,00 |
2 | 30,00 |
3 | 40,00 |
4 | abcdef |
5 |
其中价格是
VARCHAR
列。这个很重要。现在我可以做一个简单的查询,例如
select * from feed where price > 20
并且它可以工作,因为 mysql 进行了隐式类型转换。
但是如果我执行这个查询
create table results as select id, price from feed where price > 20
失败并显示 truncated incorrect DOUBLE value: 20,00
即使我在 SELECT 和 WHERE 的查询中都放入
cast(price as decimal)
,它仍然失败。
如何抑制或修复此错误?
我遇到了类似的问题,您可能会在 CREATE TABLE 的文档中找到解决方案:MariaDB - 创建表
MariaDB 从 MySQL ~2009 分叉出来,所以它很相似,尤其是在旧功能上
您可以指定特定列以将它们转换为某种数据类型:
CREATE TABLE test (a INT NOT NULL, b CHAR(10)) ENGINE=MyISAM
SELECT 5 AS b, c, d FROM another_table;
看起来有点碰运气,我有一个 7 列表(3 个 varchar,4 个整数),工作正常 - 新表将整数创建为 Double(17,0)。
另一个表有 34 列各种类型,但它一直出错,即使我将其减少到 8 个微小的 int 列,所以我屈服并使用创建代码来创建它,并将数据插入到其中
因此,这也是一种选择,首先创建表格,然后将 IGNORE 插入其中,直到变得更加稳定。