为什么数字插入VARCHAR列而没有''但字符串文本不是?

问题描述 投票:-1回答:2

所以我试着尝试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    |       |
+-------+--------------+------+-----+---------+-------+

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

mysql sql cloud9-ide cloud9
2个回答
1
投票

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

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

在数字上下文中,例如将值插入数字列时,SQL会将字符串转换为数字。在大多数情况下,如果字符串没有干净地转换为数字,SQL将生成错误。


0
投票

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

在大多数编程语言中,做出这个假设通常都很好。然而,SQL语言更宽松。它已经知道列类型是什么,因此它可以弄清楚如何存储值和你的意思。

所以在很多情况下8'8'"8"是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.