在SQL中是否可以将字符串自动转换为整数?

时间:2018-12-28 20:41:51

标签: 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    |                |
+-------------+--------------+------+-----+---------+----------------+

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

2 个答案:

答案 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的回答。

埃里克·勃兰特,我将对此提出一个新的问题。我也很想看到回应。