mysql - 将 FLOAT 值插入 MySQL 中的 INT 列时如何获得警告?

标签 mysql insert warnings

我创建了一个包含 INT 类型列的表:

CREATE TEMPORARY TABLE `myTab` (`int` INT, `text` TEXT, `float` FLOAT);

现在我尝试在 INT 列中添加一个浮点值

INSERT INTO `myTab` (`int`) VALUES (13.34);

我没有收到警告:

SHOW WARNINGS;

虽然后面的列只有13个:

SELECT * FROM `myTab`;

当将浮点值添加到整数列时,是否可能以某种方式收到警告?我目前正在使用 mysql Ver 14.14 Distrib 5.5.31,用于使用 readline 6.2 的 debian-linux-gnu (i686)

添加:我想避免为每个 INT 列 ( How do I check to see if a value is an integer in MySQL?) 添加“点检查”。我希望在转换为 INT 期间丢失数据时发出警告。

最佳答案

您可以使用 DECIMAL(n, 0) 类型代替 INT。尝试将非整数插入此类列会引发警告。

CREATE TEMPORARY TABLE t (id DECIMAL); -- equivalent to the default DECIMAL(10, 0), which covers the range of INT
INSERT INTO t VALUES (0.9); -- raises warning "1265 - Data truncated for column 'id' at row 1"
SELECT * FROM t; -- 0.9 was rounded to 1

我知道这只是一种解决方法,肯定会对性能产生负面影响(尽管可能很小)。但这是我能够想出的唯一可行的解​​决方案。

关于mysql - 将 FLOAT 值插入 MySQL 中的 INT 列时如何获得警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16672374/

相关文章:

mysql - 避免对 Node.js 中的存储过程进行 SQL 注入(inject)

php - 如何显示 |隐藏链接一段时间

mysql - 如何隔离查询以查找特定字段?

php - MySQL关系循环

algorithm - 在排序和旋转列表中插入一个元素

bash - sed:用文件内容替换一系列文本

mysql - 将数据插入列

c - 微软C编译器(cl.exe): possible to limit scope of warnings per files (/Wall)?

c++ - 在编译 C++ 控制台我的程序时,包含的 vector 头文件中出现错误,这可能吗?

c - C 处的特殊警告