Error number: 3105; Symbol: ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN; SQLSTATE: HY000
Message: The value specified for generated column ‘%s’ in table ‘%s’ is not allowed.
Error 3105:ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN
错误说明
错误代码3105,ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN,是MySQL的一个错误,被定义在MySQL的行为标准中,主要表明用户没有为被生成的列(generated column)提供了一个默认值。错误提示,表示不可以将其它值提供给被生成的列,因为这样的话反而会使得MySQL的操作出错,比如说:不能使用相应的计算,比如说不能加减乘除等。
常见案例
MySQL错误3105,ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN,通常发生在用户尝试插入已存在列作为被生成列时,比如说一些复制,分离表格或者更新操作时,如果某些默认值没有被指定的话,就会发生此错误。此外,还会发生在用户想以此被生成列为主键,或者包括它们在内的复杂索引时。
如果在列定义时,没有指定一个默认值,那么在对应列没有传入值时,MySQL就会报3105错误。
另外,错误3105也可能是因为能力或者权限的限制引起的。
解决方法
很明显,解决方法就是给每一个被生成列定义一个默认值,尤其是当使用DML**类操作时,这样可以避免出现这个错误。
若不能将默认值指定给每一列的话,MySQL也允许每次都从程序指定默认值,而不是使用现成的占位符,但是这也增加了增加了查询的复杂度。
另外:可以为被生成列指定存储零值,并以此来替换NULL值,这样就可以防止MySQL报错。同时,也可以尝试给每一条数据添加一个显示在查询结果中的一个默认值,而不是在实际的查询语句中指定这个默认值。另外,如果是因为权限的问题,可以尝试分配更多的权限给MySQL数据库,同时确保MySQL用户是可以操作这些字段的。
另外,应当留意MySQL的数据类型和数据完整性,当定义一些复杂索引时,应当规范地使用这些索引,数据完整性也要加以考虑,来确保程序运行的稳定性,而不会因为可能出现的遗漏而出现这样的错误。