例如-我从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中,这种行为标准吗?
谢谢!
MySQL非常类似于PHP,它将尽最大可能自动转换数据类型。由于您正在使用int字段(左侧),因此它将尝试将参数的右侧也透明地转换为int,因此'9'变为9。
严格来说,引号是不必要的,并且迫使MySQL执行类型转换/转换,因此浪费了CPU时间。实际上,除非您正在运行Google大小的操作,否则这种转换开销在微观上将很小。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。