当前位置: 首页 > 知识库问答 >
问题:

如何修复“操作'='的排序规则(utf8_unicode_ci,IMPLICIT)和(utf8_general_ci,IMPLICIT)非法混合”

乌杰
2023-03-14

在我的remove服务器上执行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";

这个表quick_tables.bck只是因为名字中的.bck而卡在那里。但它并不存在于我的代码中。

下面是带有SQL查询的系统变量快照:

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

Variable_name值
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_set_system utf8
character_set_dir/usr/share/mysql/charsets/
collation_connection utf8_unicode_ci
collation_database utf8_general_ci
collation_server

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

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

共有1个答案

阮轶
2023-03-14

Do显示创建过程SetNextPage\g

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

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

对于一般用途,utf8_genera_ci是最不'good',其次是utf8_unicode_ci,然后是utf8_unicode_520_ci。当您使用MySQL8.0时,还有一个更好的方法。

您可以更改连接的会话变量。

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

若要更改连接,请查看API在连接中提供了什么。或者像上面那样做一套。

 类似资料:
  • 问题内容: MySql上的错误消息: 我浏览了其他几篇文章,但无法解决此问题。受影响的部分与此类似: 我正在使用的存储过程是这样的: 我在用php测试,但是SQLyog给出了相同的错误。我还测试了重新创建整个数据库,但效果不佳。 任何帮助都感激不尽。 问题答案: 存储过程参数的默认排序规则为并且您不能混合排序规则,因此有四个选项: 选项1 :添加到您的输入变量中: 选项2 :在条款中添加: 选项3

  • 在my remove服务器上执行MySQL中的存储过程,如下所示: 我收到错误消息如下: 操作“=”的排序规则(utf8_unicode_ci,隐式)和(utf8_general_ci,隐式)的非法混合 要使存储过程运行,应该进行哪些更改?

  • 问题内容: 查看我的产品日志后,我提到了一些错误: Alghout我在cfg教义下拥有UTF-8默认值: 看来我所有的MySQL表都在其中,所以我的问题是: 我可以为所有表手动将排序规则更改为,而没有任何复杂性/注意事项吗? 问题答案: 了解以下定义会有所帮助: 甲 字符编码 信息的每个符号是如何以二进制表示(并因此存储在计算机)。例如,符号(U + 00E9,拉丁小字母E急性)被编码为在UTF-

  • 问题内容: 在处理大量数据时出现此奇怪的错误… 我该怎么解决?我可以以某种方式转义字符串,以免发生此错误,还是我需要以某种方式更改表编码,如果是,应该将其更改为什么? 问题答案: 然后为您的数据库 MySQL有时会毫无理智地潜入瑞典。

  • 问题内容: 刚刚从上一个问题得到了这个答案,就可以了! 但是当我在其中添加额外的位时会出现以下错误: 文档#1267-操作’=’的排序规则(latin1_swedish_ci,IMPLICIT)和(latin1_general_ci,IMPLICIT)的非法混合 该表是: 问题答案: 检查每个表的排序规则类型,并确保它们具有相同的排序规则。 之后,还要检查您在操作中使用的每个表字段的排序规则类型。

  • 在猫的Scala中: 每当我们为Future调用Functor时,无论是直接使用Functor.apply还是通过map扩展方法间接调用,编译器都会通过隐式解析定位futureFunctor,并在调用位置递归搜索ExecutionContext。这可能是扩展的样子: 好吧,我试试: 但有一个例外: 错误:(29, 10) 找不到参数实例的隐式值:cats。Functor[scala.concurr