我有一条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兼容数据库中的工作方式?
答案 0 :(得分:4)
在大多数数据库中,字符串到数字的转换都是自动的。因此,您可以以这种方式表达您的查询:
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);
答案 1 :(得分:0)
感谢Gordon Linoff的回答。
埃里克·勃兰特,我将对此提出一个新的问题。我也很想看到回应。