如何解决“'''操作的归类(utf8_unicode_ci,IMPLICIT)和(utf8_general_ci,IMPLICIT)的非法混合”

问题描述 投票:0回答:1

如下所示,在我的删除服务器上的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 utf8character_set_connection utf8character_set_database utf8character_set_filesystem binarycharacter_set_results utf8character_set_server latin1character_set_system utf8character_sets_dir / usr / share / mysql / charsets /collat​​ion_connection utf8_unicode_cicollat​​ion_database utf8_general_cicollat​​ion_server latin1_swedish_ci

作为一台具有共享主机的删除服务器,我无法更改环境变量。

要使我的存储过程运行,应进行哪些更改?

[如下所示,在我的删除服务器上的MySQL中执行存储过程时:创建或替换过程`SetNextPage`(IN`inRefNo` varchar(30)收集utf8_general_ci,IN`inStage` varchar(40)...

mysql stored-procedures collation
1个回答
0
投票

执行SHOW CREATE PROCEDURE SetNextPage \G

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

© www.soinside.com 2019 - 2024. All rights reserved.