Bar*_*eld 0 mysql sql ms-access
我有一个 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 | |
+-------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
SQL 语句是;
INSERT INTO photos
(title, description, filename, type, size)
VALUES
('Title D', 'Description D', 'Filename_D', 'BMP', '2000');
Run Code Online (Sandbox Code Playgroud)
我总是被告知,如果列类型与尝试插入或更新的数据类型不匹配,SQL 就会抛出错误。
令我惊讶的是,即使“大小”列被定义为整数并且 SQL 语句中的大小数据用引号引起来,使其成为字符串(“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');
Run Code Online (Sandbox Code Playgroud)
这是一个坏主意,因为隐式转换可能会产生转换错误——而且您不知道它们来自哪里。我强烈建议使用正确的类型或显式转换:
INSERT INTO photos (title, description, filename, type, size)
VALUES ('Title D', 'Description D', 'Filename_D', 'BMP', 2000);
Run Code Online (Sandbox Code Playgroud)