MySQL Error number: MY-013840; Symbol: ER_CANNOT_INTERPRET_PERSISTED_SENSITIVE_VARIABLES; SQLSTATE: HY000 报错 故障修复 远程处理
文档解释
Error number: MY-013840; Symbol: ER_CANNOT_INTERPRET_PERSISTED_SENSITIVE_VARIABLES; SQLSTATE: HY000
Message: Cannot interpret persisted SENSITIVE system variables. Please make sure that keyring services are active and required keys are available.
Error Number: MY-013840; Symbol: ER_CANNOT_INTERPRET_PERSISTED_SENSITIVE_VARIABLES; SQLSTATE: HY000
错误说明
MY-013840,也称错误ER_CANNOT_INTERPRET_PERSISTED_SENSITIVE_VARIABLES,是MySQL在解释持久化存储Values时遇到的一个错误。即:MySQL无法解释恒定的安全变量,这是个内部错误代码,并且会在SQLSTATE =HY000中返回。MySQL 5.7及以上版本使用此返回值。
常见案例
这种情况可能发生在以下情况:
(1)存储过程有多个输出变量,其中一个变量可能是一个“已存储的安全值”。
(2)最近的MySQL版本(5.7及更高版本)中,尝试获取变量值时可能会引发这个错误说明,因为MySQL没有提供一种机制来解释该变量值。
(3)一旦变量值被识别为“立即标记”,就会出现错误,因为MySQL在解释新的值时不会自动从后续值中检索出立即标记的值。
解决方法
最简单的解决方法就是将安全变量从存储过程中删除,然后直接从程序组中提取该变量的值。但是,如果持久化安全变量在存储过程中起重要作用,则可以采取以下几种技巧来解决这个问题:
(1)确保安全变量是以字符串形式恒定存储和检索的,而不是以立即值形式恒定存储和检索的。
(2)可以使用CAST()函数来定义一个MySQL代码,以确保恒定值被正确分析,而不是被解释为立即值。
(3)还可以尝试使用MySQL的JSON对象存储变量的值,以避免变量值被识别为立即值。
总而言之,此错误代码是MySQL服务器内部出现的一个逻辑性错误,但是,可以采取上述步骤来解决此类问题。