我使用一条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“列被定义为整数,并且size语句中的size数据被括在引号中,使其成为字符串('2000'),但SQL语句在MySQL和MS Access中仍然有效。
这是MySQL和MS Access的一个特性,还是所有符合SQL的数据库中SQL的工作方式?
发布于 2018-12-29 04:43:39
在大多数数据库中,字符串到数字的转换都是自动的。因此,您可以这样表达您的查询:
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);
发布于 2018-12-29 16:01:00
感谢戈登·林诺夫的回答。
埃里克·勃兰特,我将对此提出一个新的问题。我也很想看看大家的反应。
https://stackoverflow.com/questions/53964072
复制相似问题