[英]Is string to integer conversion automatic in SQL?
我有一条SQL语句可将记录插入表中。 该表定义为:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| description | text | NO | | NULL | |
| filename | varchar(255) | NO | | NULL | |
| type | varchar(255) | NO | | NULL | |
| size | int(11) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
SQL语句是;
INSERT INTO photos
(title, description, filename, type, size)
VALUES
('Title D', 'Description D', 'Filename_D', 'BMP', '2000');
我总是被告知,如果您没有将列类型与尝试插入或更新的数据类型匹配,SQL将会抛出错误。
令我惊讶的是,即使“ size”列定义为整数并且SQL语句中的size数据用引号括起来使其成为字符串('2000'),该SQL语句仍在MySQL和MS Access中工作。
这是MySQL和MS Access功能还是SQL在所有符合SQL的数据库中如何工作?
在大多数数据库中,字符串到数字的转换是自动的。 因此,您可以通过以下方式表达您的查询:
INSERT INTO photos (title, description, filename, type, size)
VALUES ('Title D', 'Description D', 'Filename_D', 'BMP', '2000');
这是一个坏主意,因为隐式转换会产生转换错误-而且您不知道它们来自何处。 我强烈建议使用正确的类型或显式转换:
INSERT INTO photos (title, description, filename, type, size)
VALUES ('Title D', 'Description D', 'Filename_D', 'BMP', 2000);
谢谢Gordon Linoff的回答。
埃里克·勃兰特(Eric Brandt),我将对此提出一个新的问题。 我也很想看到回应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.