gpt4 book ai didi

MySQL "illegal mix of collations"使用源文件中的变量

转载 作者:行者123 更新时间:2023-11-29 11:41:51 25 4
gpt4 key购买 nike

我的 .sql 文件中有以下内容:

SET @campaigns = "'9c943c24-f636-11e3-98bd-02f651afdab5','7ca1cf19-f562-11e3-98bd-02f651afdab5'";

select * from campaigns
where id in (@campaigns);

campaigns定义为:

CREATE TABLE `campaigns` (
`id` varchar(36) COLLATE utf8_unicode_ci NOT NULL,
# column defs snipped #
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

如果我通过命令行连接到本地 MySQL 实例并尝试执行上述文件:

$ mysql -h localhost -u usename -ppassword
mysql> use mydatabase;
mysql> source myfile.sql

我收到以下错误:

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

如果我更改查询以(我认为)指定排序规则:

select * from campaigns
where id COLLATE utf8_unicode_ci in (@campaigns);

响应是:

查询正常,0 行受影响(0.00 秒)空集(0.00秒)

如果我将变量内容直接放入查询中:

select * from campaigns
where id in ('9c943c24-f636-11e3-98bd-02f651afdab5','7ca1cf19-f562-11e3-98bd-02f651afdab5');

我得到了预期的两个返回结果。

发生什么事了?我已经阅读了有关 MySQL collat​​ion 的多个 Stack Overflow 线程以及类似的错误,但我仍然无法理解为什么我的变量没有按我的预期工作。

最佳答案

语法不允许 in (@campaigns),其中 @campaigns 是项目的逗号。您实际上要求的是一根长绳子,而不是您希望的两根。我认为没有办法做你想做的事(将 @variable 设置为列表,然后在 IN 中使用它。)

要调查您收到排序规则错误的原因,请提供

SHOW VARIABLES LIKE 'char%';
SHOW VARIABLES LIKE 'coll%';

关于MySQL "illegal mix of collations"使用源文件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35649804/

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