为什么将数字插入不带''但不包含字符串文本的VARCHAR列中?

时间:2019-02-16 01:29:27

标签: mysql sql cloud9-ide cloud9

因此,我尝试使用INSERT INTO代码进行试验。我尝试使用该语句,

INSERT INTO cats (name, age)
VALUES ( 8, '3');

尝试一下,看看会发生什么。事实证明,它仍然可以存储两个值。名称为8,未满3岁。我还尝试插入名称Momo,不带引号,但没有用。数字8为何没有''且Momo没有'工作?另外,当我使用''作为整数3时,为什么仍将那个值当作年龄呢?

我只想澄清一下问题的最后一部分。我尝试在年龄值中插入“ Mimi”,并且该表显示为0。我只是假设这意味着空值,因为“ Mimi”不是整数。那是对的吗?如果是这样,那么“ 3”为什么起作用?

为进一步说明,我的表如下所示:

mysql> SHOW COLUMNS FROM cats;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| name  | varchar(100) | YES  |     | NULL    |       |
| age   | int(11)      | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

我是一个真正的初学者,所以很抱歉这个非常简单的问题

2 个答案:

答案 0 :(得分:1)

在SQL中,字符串常量需要用单引号引起来。否则,它们将被解释为标识符-在大多数情况下大概是列名,但它也可能是变量名。

values()语句无法引用列,因此Momo将产生错误,导致无法识别标识符。请注意,双引号是某些数据库(包括MySQL)中的例外。它们可以包含标识符或字符串值。

在数字上下文中,例如在将值插入数字列时,SQL会将字符串转换为数字。在大多数情况下,如果字符串不能完全转换为数字,则SQL会生成错误。

答案 1 :(得分:0)

我认为您所做的假设是'8'是一个字符串,而8是一个整数。

在大多数编程语言中,进行此假设通常是一个很好的假设。但是,SQL语言更为宽容。它已经知道列的类型是什么,因此它可以弄清楚如何存储值以及您的意思。

因此,在许多情况下,8'8'"8"是相同的。