MariaDB 10.3将字符串参数隐式转换为整数列失败

时间:2019-05-16 17:00:41

标签: mysql mariadb

从MariaDB 10.0.x升级到10.3.x后,包含引号的整数字符串(如“ 3”)的SELECT不再隐式转换为INTEGER列值,这将导致查询失败1366,不正确的整数值。有没有一种方法可以启用隐式转换?

已经尝试了一些SQL_MODE设置来解决该问题,但没有效果。这是一个简单的示例场景。

CREATE TABLE IF NOT EXISTS database.tablename (
   col1 INTEGER UNSIGNED,
   col2 INTEGER UNSIGNED,
   PRIMARY KEY (col1)) ENGINE = MEMORY;
INSERT INTO database.tablename VALUES (1,'2');
  

查询失败(1366),:第1行的'database','tablename','col2'列的整数值不正确

我希望查询成功,因为在第二行中隐式将第2列强制转换为INTEGER UNSIGNED(在MariaDB 10.0.x中发生)。

2 个答案:

答案 0 :(得分:0)

我已经知道发生了什么事。

启用STRICT_TRANS_TABLES模式会在表定义中暴露一个问题,其中没有为INTEGER列提供默认值。这是MariaDB 10.3中对我们的新问题,因为MariaDB 10.0.38和10.3.15之间的默认SQL_MODE更改包括STRICT_TRANS_TABLES。可以通过删除该标志来纠正。

通过与连接的进程一起运行的MariaDB删除标志

set sql_mode =“”; 设置GLOBAL sql_mode =“”;

在重新启动连接过程并将其与数据库的连接重置之前,不会更改INSERT行为。此后,将应用数据类型默认值规则,并且执行INSERT查询时不会出错。

因此问题不在于查询中引用的整数数据类型,而是当为连接启用STRICT_TRANS_TABLES时,该列没有整数默认值。

答案 1 :(得分:0)

如果您需要快速解决方案,您可以在查询前添加 set sql_mode = "";。例如 -

set sql_mode = "";
your sql here;