是否有任何sql模式将返回错误而不是隐式将字符串转换为整数?
mysql> select * from todel ;
+------+--------+
| id | name |
+------+--------+
| 1 | abc |
| 2 | xyz |
| 0 | ABCxyz |
+------+--------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
我期待一条错误消息而不是id为0的行
mysql> select * from todel where id = 'abc';
+------+--------+
| id | name |
+------+--------+
| 0 | ABCxyz |
+------+--------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+-----------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'abc' |
+---------+------+-----------------------------------------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
我理解您的担忧,但正是因为这个原因,您永远不应该将 id 设置为0. 从长远来看,我认为您应该在行为之前重新考虑表行,这在理想情况下不是问题。通过一些搜索,我没有找到任何与此相关的内容,这可能是因为除非您将其解决,否则它可能不是问题。
除此之外,您可以读取相关列数据并在 php/whatev 中进行相应操作。COLUMNS从中的表中information_schema,您可以按TABLE_SCHEMA(database) 进行筛选,TABLE_NAME并COLUMN_NAME获取DATATYPE(double)。如果您要更改的列具有特定的DATATYPE,请让脚本在运行 MySQL 查询之前给出错误。
另一种方法是在解析之前转换输入:
if ( ! is_numeric($id))
$id = 'NULL';
Run Code Online (Sandbox Code Playgroud)
为了防止错误的INSERTs 或UPDATEs,您已经拥有该模式。
最后我想不出很多实用的方法来让你所追求的这种严格模式让 MySQL 用户受益。
| 归档时间: |
|
| 查看次数: |
1925 次 |
| 最近记录: |