为什么整数数据被插入到“varchar”列中而不给出单引号?

Sur*_*til 3 mysql implicit-conversion

create table student(id int, name varchar(20));
Run Code Online (Sandbox Code Playgroud)

学生表在这里创建。*

insert into student values(20,100);
Run Code Online (Sandbox Code Playgroud)

在上面的查询中,我在name列中插入整数值 100 ,即varchar。为什么它没有给出错误或它是如何插入的?

编辑1:但是在插入字符串时是否需要给出单引号?前任。插入学生值(20,suraj); 给出错误

Jos*_*osh 7

这对于不同的数据库有不同的处理方式。对于 MySQL,整数会为您隐式转换为 varchar,但在 SQL 中,它会产生错误。对于 MySQL,自动转换只是一些语言为了方便而具有的松散类型的一部分。

如果要强制 MySQL 进行类型检查,可以在配置文件中使用 STRICT_ALL_TABLES。您还可以通过以下方式在当前会话中设置它:

$ SET sql_mode = 'STRICT_ALL_TABLES';
Run Code Online (Sandbox Code Playgroud)

https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_strict_all_tables

希望这可以帮助!

编辑 1:对于字符串文字,语言通常需要引号,以便程序知道它是字符串而不是关键字。例如,如果你的字符串是“select”,MySQL 需要知道你的意思是作为一个字符串。

  • 可能是因为这是 ANSI SQL 标准中定义字符串的方式;但我现在正在寻找。还不能轻松找到它......想想如果你的字符串是“她问,“你好吗?”没有单引号来抵消逗号和引号,数据库可能认为你正在尝试插入'她在一个专栏中问',“你好吗?” 在另一个......所以'只是表示结构。但我还不能找到来源。换句话说,因为这是编译器知道如何解释字符数据的方式。 (3认同)