开发者社区> 问答> 正文

MySQL的-报价数字或没有??mysql

例如-我从cli创建数据库和表并插入一些数据:

CREATE DATABASE testdb CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; USE testdb; CREATE TABLE test (id INT, str VARCHAR(100)) TYPE=innodb CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; INSERT INTO test VALUES (9, 'some string'); 现在,我可以执行此操作,并且这些示例也可以工作(因此-引号不会影响看起来的任何内容):

SELECT * FROM test WHERE id = '9'; INSERT INTO test VALUES ('11', 'some string'); 所以-在这些示例中,我选择了一个字符串,该字符串实际在mysql中存储为INT,然后在INT列中插入了一个字符串。

我不太明白为什么它会按这里的方式工作。为什么允许在INT列中插入字符串?

我可以将所有Mysql数据类型作为字符串插入吗?

在不同的RDBMS中,这种行为标准吗?

谢谢!

展开
收起
保持可爱mmm 2020-05-17 12:20:46 391 0
1 条回答
写回答
取消 提交回答
  • MySQL非常类似于PHP,它将尽最大可能自动转换数据类型。由于您正在使用int字段(左侧),因此它将尝试将参数的右侧也透明地转换为int,因此'9'变为9。

    严格来说,引号是不必要的,并且迫使MySQL执行类型转换/转换,因此浪费了CPU时间。实际上,除非您正在运行Google大小的操作,否则这种转换开销在微观上将很小。来源:stack overflow

    2020-05-17 12:31:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
MySQL 5.7让优化更轻松 立即下载
深入MySQL实战 立即下载
好的 MySQL 兼容可以做到什么程度 立即下载

相关镜像