我的服务器提供商已将MYSQL替换为MariaDB,而这似乎有所不同。我运行“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行的列'Year'的错误整数值'test' “这是我所期待的并且依赖于它。
有人能说清楚为什么会这样吗?
答案 0 :(得分:3)
让我把它妥善回答。发生这种情况的原因有两个,一个是Type conversion,主要原因是SQL Modes配置部分中的STRICT_MODE配置。
严格模式状态
启用STRICT_TRANS_TABLES或STRICT_ALL_TABLES中的至少一个的模式称为严格模式。如果未设置严格模式(默认情况下为版本< = MariaDB 10.2.3),MariaDB将自动调整无效值,例如,截断太长的字符串,或调整超出范围的数值,并产生警告。
使用严格模式设置(默认来自MariaDB 10.2.4),语句将失败,并将返回错误。当设置严格模式将错误转换为警告时,可以使用IGNORE关键字。