spr*_*ten 0 mysql sql database oracle postgresql
在MySQL上如果我运行查询
SELECT * FROM table WHERE id = '1blah'
Run Code Online (Sandbox Code Playgroud)
并且存在ID为1的记录,查询将实际返回该记录.我正在通过Workbench和PHP/Doctrine执行查询,我得到了相同的结果.
为什么MySQL会这样做?这里涉及的是更一般的数据库概念吗?语言/客户端是否在此方面发挥作用?
最后,PostgreSQL和Oracle将如何表现?
Postgres和Oracle会(正确地)返回语法错误:
# select 1 = '1abc';
ERROR: invalid input syntax for integer: "1abc"
LINE 1: select 1 = '1abc';
Run Code Online (Sandbox Code Playgroud)
MySQL允许这样做,因为它进行隐式转换.可以把它想象成技术债务,一直追溯到它的第一个版本.它允许(例如)PHP应用程序执行类似的查询select * from foo where id = '1'.无论好坏.
如果您不喜欢这种行为,可以通过MySQL自MySQL 5以严格模式运行来禁用它.但这会破坏大多数PHP应用程序.
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |