SQL 中字符串到整数的转换是自动的吗?

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 兼容数据库中工作的方式?

Gor*_*off 5

在大多数数据库中,字符串到数字的转换是自动的。因此,您可以这样表达您的查询:

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)