首页 文章

MySql奇怪的行为 - 从where子句中的id右侧剥离字符

提问于
浏览
1

我今天发现了一些奇怪的事假设你有一个mysql表:

create table usr(
  usr_id serial
)

然后你插入一行:

INSERT INTO usr (usr_id) VALUES ('1');

然后你运行一个查询:

SELECT * FROM usr WHERE usr_id='1sfgfsdgs'

MySql返回结果,就像您输入的一样:

SELECT * FROM usr WHERE usr_id='1'

这会发生吗?如果是的话 - 有人能指出我描述这个的文件吗?我只是好奇这是否是预期的行为 .

[jeremy @ jjxps15~] $ mysql --version mysql Ver 15.1使用readline 5.1分发10.1.17-MariaDB,用于Linux(x86_64)

2 回答

  • 0

    那么这是有污垢的页面,http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

    但它显然是泥

    当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容 . 某些转换是隐式发生的 . 例如,MySQL会根据需要自动将数字转换为字符串,反之亦然 .

    它确实有一些例子可以使事情更加清晰

    mysql> SELECT 1 > '6x';
            -> 0
    mysql> SELECT 7 > '6x';
            -> 1
    mysql> SELECT 0 > 'x6';
            -> 0
    mysql> SELECT 0 = 'x6';
            -> 1
    

    这实际上意味着如果将数字与字母数字字符串进行比较,并且该字符串以数字开头,则所有非数字字符都将被丢弃 .

    您使用串行的事实与此无关 .

  • 0

    因为 usr_idserial 列,所以它可能只包含整数(What is the difference between SERIAL and AUTO_INCREMENT in mysql) .

    因此MySQL忽略了'1'旁边的字符 .

相关问题