我正在使用 MariaDB 10.2.4。默认情况下,sql_mode 包括 STRICT_TRANS_TABLES,这在大多数情况下都很好。但在特定情况下,我希望数据被截断。有没有办法临时覆盖 sql_mode,或者 INSERT 语句的选项显式允许截断?我在文档或谷歌搜索中找不到任何东西。
您可能会认为这是我应该禁用 MySQL 严格模式的副本吗?,但这个问题是在 2011 年,所以从那时起可能会有新的选择。另外,这个问题是关于一般模式的最佳实践,而不是关于在运行时覆盖的能力。
我正在使用 MariaDB 10.2.4。默认情况下,sql_mode 包括 STRICT_TRANS_TABLES,这在大多数情况下都很好。但在特定情况下,我希望数据被截断。有没有办法临时覆盖 sql_mode,或者 INSERT 语句的选项显式允许截断?我在文档或谷歌搜索中找不到任何东西。
您可能会认为这是我应该禁用 MySQL 严格模式的副本吗?,但这个问题是在 2011 年,所以从那时起可能会有新的选择。另外,这个问题是关于一般模式的最佳实践,而不是关于在运行时覆盖的能力。
有没有办法暂时覆盖 sql_mode
SET sql_mode = 'mode';
是的,您可以通过在 INSERT 之前触发语句来更改此设置。
https://mariadb.com/kb/en/mariadb/sql-mode/#setting-sql_mode:
会话值只影响当前客户端,可以在需要时由客户端更改。
因此,如果您在之后立即将其设置回来,则可以确保它仅对这个特定的 INSERT 语句生效。