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

Truncate on INSERT as an exception while in strict 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 语句生效。