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是否对这个字符集支持特定操作,例如:事务,存储等,以确保字符集不会出现问题。

你可能感兴趣的