首页 文章

为什么MariaDBb允许将文本插入smallint

提问于
浏览
1

我的服务器提供商已经用MariaDB取代了MYSQL,这似乎有所不同 . 我运行“SHOW GLOBAL VARIABLES LIKE'%version%';”时获得的这台服务器上的信息是:

Variable_name值
protocol_version 10
slave_type_conversions

版本5.5.58-MariaDB
version_comment MariaDB服务器
version_compile_machine x86_64
version_compile_os Linux

SQL语句“INSERT INTO years( Year )VALUES('test');”使用Aria或MyISAM引擎将0插入smallint字段

在我的本地开发系统上运行“SHOW GLOBAL VARIABLES LIKE'%version%';”我得到:

Variable_name值
innodb_version 5.6.21
protocol_version 10
slave_type_conversions
版本5.6.21-log
version_comment MySQL社区服务器(GPL)
version_compile_machine x86_64
version_compile_os Win64

相同的SQL语句“INSERT INTO years( Year )VALUES('test');”使用MYISAM引擎会产生错误代码:1366“第1行第'年'列的错误整数值'test'”这是我所期待的并且依赖于上 .

任何人都可以阐明为什么会这样吗?

1 回答

  • 3

    让我说一个正确的答案 . 发生这种情况的原因有两个,一个是Type conversion,主要原因是SQL Modes配置部分中的STRICT_MODE配置 .

    Strict Mode 说明

    启用STRICT_TRANS_TABLES或STRICT_ALL_TABLES中的至少一个的模式称为严格模式 . 如果未设置严格模式(版本<= MariaDB 10.2.3中的默认模式),MariaDB将自动调整无效值,例如,截断太长的字符串,或调整超出范围的数值,并产生警告 . 使用严格模式设置(默认来自MariaDB 10.2.4),语句将失败,并将返回错误 . 设置严格模式以将错误转换为警告时,可以使用IGNORE关键字 .

相关问题