gpt4 book ai didi

mysql - 如何修复 "Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation ' ='"

转载 作者:行者123 更新时间:2023-11-29 15:19:20 30 4
gpt4 key购买 nike

在我的删除服务器上执行 MySQL 中的存储过程时,如下所示:

CREATE OR REPLACE PROCEDURE `SetNextPage`(
IN `inRefNo` varchar(30) COLLATE utf8_general_ci,
IN `inStage` varchar(40) COLLATE utf8_general_ci,
IN `inRedirectTo` varchar(50) COLLATE utf8_general_ci,
IN `inSurveyType` varchar(14) COLLATE utf8_general_ci
)
BEGIN
IF inSurveyType = 'preinspection' THEN
UPDATE preinspections SET Stage = inStage, RedirectTo = inRedirectTo WHERE RefNo = inRefNo;
ELSE
UPDATE surveys SET Stage = inStage, RedirectTo = inRedirectTo WHERE RefNo = inRefNo;
END IF;
END

我收到的错误消息为:

操作“=”时非法混合排序规则 (utf8_unicode_ci,IMPLICIT) 和 (utf8_general_ci,IMPLICIT)

这是我的数据库中的表的屏幕截图,查询如下:

SELECT TABLE_NAME, TABLE_COLLATION
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="mydatabase" AND TABLE_TYPE="BASE TABLE";

Screenshot of tables from phpMyAdmin

此表 quick_tables.bck 只是因为其名称中的 .bck 而卡在那里。但它不在我的代码中的任何地方。

这是带有 SQL 查询的系统变量的快照,如下所示:

SHOW VARIABLES WHERE Variable_name LIKE ("character%") OR Variable_name LIKE ("Collation%");

变量名称
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem 二进制
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collat​​ion_connection utf8_unicode_ci
collat​​ion_database utf8_general_ci
collat​​ion_server latin1_swedish_ci

在使用共享主机的远程服务器上,我无法更改环境变量。

我应该进行哪些更改才能使我的存储过程运行?

最佳答案

执行显示创建过程SetNextPage\G

您可能会发现定义过程时有效的字符集和/或排序规则不是您现在想要的。

更改连接的排序规则,或者删除过程、设置名称,然后重新创建过程。

对于一般用途,utf8_genera_ci 是最不“好”的,其次是 utf8_unicode_ci,然后是 utf8_unicode_520_ci。当您使用 MySQL 8.0 时,会有一个更好的。

可以更改连接的SESSION变量。

由于 Proc 中的设置和连接之间存在差异,因此需要更改其中之一。

要更改过程,请DROP它,SET NAMES utf8 COLLATE utf8_unicode_520_ci;重新CREATE它。

要更改连接,请查看 API 在连接中提供的内容。或者像上面那样做一组。

关于mysql - 如何修复 "Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation ' ='",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59472631/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com