MySQL Error number: MY-013425; Symbol: ER_BINLOG_UNSAFE_DEFAULT_EXPRESSION_IN_SUBSTATEMENT; SQLSTATE: HY000

文档解释

Error number: MY-013425; Symbol: ER_BINLOG_UNSAFE_DEFAULT_EXPRESSION_IN_SUBSTATEMENT; SQLSTATE: HY000

Message: The statement is unsafe because it invokes a trigger or a stored function that modifies a table that has a column with a DEFAULT expression that may return a different value on the replica.

MY-013425; ER_BINLOG_UNSAFE_DEFAULT_EXPRESSION_IN_SUBSTATEMENT; HY000 错误

这个错误是MySQL 5.6中加入的一个错误,它出现在在表达式中使用不安全的默认值时。这个错误通常会出现在binlog中,用户在使用表达式时将值设置为NULL,MySQL就会出现这个错误提醒。

常见案例

这个错误会在两种情况下出现:

第一种是用户在使用事务时执行ddl语句,这里的语句中插入含有“DEFAULT”的值,因此MySQL会发出这个错误提醒用户事务中使用的表达式中每个列的值都应该是不安全的。

第二种是用户在写入binlog时使用不安全的表达式(比如:“SET@var”),这个表达式中的值是MySQL预设的,因此MySQL会提醒用户在binlog中使用的所有语句要尽量采用不安全的表达式。

解决方法

1. 用户应在使用事务时尽量确保语句中每个列的值都是不安全的,不能令默认值为NULL,这可以通过在表达式中使用指定的

2. 用户在存入binlog时要尽量采用不安全的表达式,这可以指定的值(比如:” Literal()“)来避免出现这个错误。

3. 如果执行语句后还是出现这个错误,那就需要用户将”log_bin_use_unsafe_defaults_for_expression”参数设为true或空。用户也可以将这个参数设置为”OFF”来强制MySQL检测不安全的表达式。

4. 另外,用户也可以在执行语句前关闭binlog,这样就不会产生任何问题,但是这也会影响复制功能等,所以应谨慎操作。

总之,针对MY-013425; ER_BINLOG_UNSAFE_DEFAULT_EXPRESSION_IN_SUBSTATEMENT; HY000 错误,用户可以多多考虑采用的解决方法,以确保正确的使用MySQL的语句。

你可能感兴趣的