mysql - 在严格模式下截断 INSERT 作为异常?

标签 mysql mariadb sql-mode

我使用的是 MariaDB 10.2.4。默认情况下,sql_mode 包括 STRICT_TRANS_TABLES,这在大多数情况下都很好。但在特定情况下,我希望数据被截断。有没有办法暂时覆盖 sql_mode,或者 INSERT 语句的选项可以显式允许截断?我在文档中或通过谷歌搜索找不到任何内容。

您可能会认为这是 Should I disable MySQL strict mode? 的重复项,但那个问题是 2011 年的,所以从那时起可能会有新的选择。另外,这个问题是关于一般模式的最佳实践,而不是关于在运行时覆盖的能力。

最佳答案

Is there a way to override the sql_mode temporarily

是的,您可以通过在 INSERT 之前触发 SET sql_mode = 'mode'; 语句来更改此设置。

https://mariadb.com/kb/en/mariadb/sql-mode/#setting-sql_mode :

The session value only affects the current client, and can be changed by the client when required.

因此,如果您在之后立即将其设置回来,则可以确保它仅对该特定 INSERT 语句生效。

关于mysql - 在严格模式下截断 INSERT 作为异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45212365/

相关文章:

mysql - 如何使用多个值设置 Amazon RDS SQL_MODE

mysql - SQL 将 'mm/dd/yy' 字符串转换为日期格式

mysql - 仅针对特定其他列值的一列的索引

mysql - Mariadb 主从复制停止且没有错误

php - mysql 从 5.5 升级到 5.7 后的空查询

MySQL 使用 DUPLICATE KEY UPDATE 时出错

mysql - ASP/MySQL - 参数化查询

php - PDO where IN 语句始终为空

mysql - max_allowed_pa​​cket=1024M... 它仍然给我错误 "Got a packet bigger than ' max_allowed_pa​​cket' bytes query...”

mysql - 无法创建 MySQL 过程来更新表