Mysql 在严格模式下,是否将插入时截断作为异常?

Mysql 在严格模式下,是否将插入时截断作为异常?,mysql,mariadb,sql-mode,Mysql,Mariadb,Sql Mode,我正在使用MariaDB 10.2.4。默认情况下,sql_模式包括严格的_TRANS_表,这在大多数情况下都是好的。但在特定情况下,我希望数据只是被截断。是否有临时覆盖sql_模式的方法,或者INSERT语句有显式允许截断的选项?我在文档或谷歌上找不到任何东西 你可能会认为这是一个重复的问题,但这个问题是在2011年,所以从那以后可能会有新的选择。另外,这个问题是关于一般模式的最佳实践,而不是关于在运行时重写的能力 有没有办法暂时覆盖sql_模式 是的,您可以通过触发一组sql_mode='m

我正在使用MariaDB 10.2.4。默认情况下,sql_模式包括严格的_TRANS_表,这在大多数情况下都是好的。但在特定情况下,我希望数据只是被截断。是否有临时覆盖sql_模式的方法,或者INSERT语句有显式允许截断的选项?我在文档或谷歌上找不到任何东西

你可能会认为这是一个重复的问题,但这个问题是在2011年,所以从那以后可能会有新的选择。另外,这个问题是关于一般模式的最佳实践,而不是关于在运行时重写的能力

有没有办法暂时覆盖sql_模式

是的,您可以通过触发一组sql_mode='mode'来改变这一点;插入前的语句

:

会话值仅影响当前客户端,客户端可以在需要时更改该值


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

如果您在此处讨论的是简单的文本字段/值,您可能已经可以尝试在语句中执行“截断”了?我在想类似于插入到。。。值禁用“此处的长动态文本值”,1,10。。。当然,这不是很灵活,如果表结构发生变化,则需要进行修改;但是作为应用程序中单个事件的解决方法,它可能会这样做。是的,我知道,或者我可以在生成语句时用PHP这样做,但不管怎样,我希望不必记住将模式和代码与硬编码的数字保持同步。这当然是我的B计划,但是还有其他选择吗?我想你可以通过启动一个set-sql_-mode='mode',从代码中设置它;在插入之前声明,并在插入之后将其设置回,-“会话值仅影响当前客户端,并且可以在需要时由客户端更改”@CBroe啊,我没有意识到这样的更改不会影响其他并发用户-这很好。如果你回答这个问题,我会接受的。