为什么 MySQL 允许将文本插入整数(INT)字段?
例如,我有这个:
INSERT INTO `estudiante` (`usuarioID`, `identidad`, `correo`, `institucion`)
VALUES ("32", 'xxx', '[email protected]', 'exterior')
第二个字段是整数,因为它在插入文本时不会给我一个错误
我究竟做错了什么?它应该是一个 int 它不应该允许文本,它将它转换为零
这是表格布局:
CREATE TABLE `estudiante` (
`usuarioID` INT(11) NOT NULL,
`identidad` INT(20) NOT NULL,
`correo` VARCHAR(40) NOT NULL,
`institucion` VARCHAR(80) NOT NULL,
PRIMARY KEY (`usuarioID`)
)
您观察到的行为在此处的文档中进行了描述:
(差)翻译:
旁注,这是我不太尊重 MySQL 作为数据库的几个原因之一。如果您想阅读整个页面,那么 MySQL 默认情况下愿意扭曲/转换数据以避免给您错误,这真是令人惊讶。他们所说的帮您一个忙,我称之为数据损坏。
在任何情况下,应用记录的规则,这意味着 MySQL 会像这样插入和转换以下字符串:
Demo
如果像我一样,你没有发现这种行为是正确的,你可以修改 MySQL 处理这些情况的方式。同样,正如文档所说:
(差)翻译:
而且,事实上,如果你确保
sql_mode
你的会话包含STRICT_TRANS_TABLES
,你会看到 MySQL 会抛出一个错误。Demo
要查看您的价值
sql_mode
:如何修改
sql_mode
会话的示例:有关SQL 模式的更多信息,您可以点击以下链接:服务器 SQL 模式。
在这些情况下,MySQL 会进行转换:
我是说:
资料来源:MySQL 参考手册