MySQL Error number: MY-010776; Symbol: ER_EVENT_CANT_GET_COLLATION; SQLSTATE: HY000 报错 故障修复 远程处理
文档解释
Error number: MY-010776; Symbol: ER_EVENT_CANT_GET_COLLATION; SQLSTATE: HY000
Message: Event ‘%s’.’%s’: invalid value in column mysql.event.collation_connection.
错误说明
MY-010776 ER_EVENT_CANT_GET_COLLATION错误用于表示无法获取所请求的字符集。这个错误可能源于一些字符集操作不当造成的。
常见案例
当我们尝试创建带有某种字符集的MySQL Event时,这个错误可能会发生。例如:在SQL语句如下的情况下,MySQL会报这个错误:
CREATE EVENT `my_event` ON SCHEDULE EVERY ‘1’ WEEK
STARTS ‘2020-06-10 16:20:00’
ENDS ‘2021-06-01 17:00:00’
ON COMPLETION PRESERVE
DO BEGIN
CALL `my_sp`(CHARACTER_SET_CLIENT=utf8);
END;
此外,字符集操作不当也可能导致出现这个错误。
例如:在UPDATE 语句中,设置CHARACTER_SET_CLIENT = ut8,但CALL 语句却使用该字符集之外的字符集。
解决方法
根据上述案例,要解决这个错误,可以采取以下几种方式:
1. 避免在CHARACTER_SET_CLIENT变量上设置ut8,而是在调用过程中指定字符集。例如:
CREATE EVENT `my_event` ON SCHEDULE EVERY ‘1’ WEEK
STARTS ‘2020-06-10 16:20:00’
ENDS ‘2021-06-01 17:00:00’
ON COMPLETION PRESERVE
DO BEGIN
CALL `my_sp`(CHARACTER_SET_CLIENT=utf8, CHARACTER_SET_RESULTS=’utf8′);
END;
2. 启用event_scheduler
如果没有启用MySQL中的event_scheduler,那么也会出现这个问题,因此需要检查show variables like ‘%event_scheduler%’查看event_scheduler状态,如果其值为OFF,可将其修改为ON
3. 检查指定的字符集是否存在
在指定字符集操作时,比如指定CHARACTER_SET_CLIENT = ut8,还要检查字符集是否存在,例如:SELECT * FROM ICHARACTERSET WHERE CHARACTER_SET_NAME = ‘utf8’ 。如果不存在,可以根据需求添加,使用如下语句:
CREATE CHARSET `utf8` DEFAULT COLLATE `utf8_general_ci`;
4. 检查主机里MySQL安装的字符集是否正确
在指定字符集操作时,还要检查主机里MySQL安装的字符集是否正确,如果安装有多个字符集,可以使用以下语句查看正确的字符集:SELECT * FROM ICHARACTERSET 。
此外,我们还可以检查MySQL是否对这个字符集支持特定操作,例如:事务,存储等,以确保字符集不会出现问题。