MySQL变量分配未分配给变量-我在做什么错?

时间:2019-09-26 16:25:45

标签: mysql

我正在尝试为这样的用户定义变量分配值:

SET @v1='name_to_filter';


SELECT *
FROM mytable
WHERE column=@v1;

问题是此代码返回0行,但是如果不声明此变量,我将要过滤的名称放在代码返回几行的位置:

SELECT *
FROM mytable
WHERE column='name_to_filter';

因此变量没有保存我分配给它的名称,我在做什么错了?

2 个答案:

答案 0 :(得分:1)

用户定义变量的排序规则默认为连接排序规则,该排序规则与您尝试比较的列的排序规则不同。结果,mysql无法正确进行比较,因此会引发错误。

一种解决方案是更改连接排序规则以匹配您的列排序规则。在其余部分之前运行此语句:

SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';

要确认列的排序规则,可以使用以下语句:

SHOW FULL COLUMNS FROM tablename

它将返回一个名为Collat​​ion的列

答案 1 :(得分:0)

SELECT @v1 = 'good',price1  FROM test.classification
where type = @v1;

输入此代码时:

set @v1 = 'what ever';

然后在此之后的下一个查询无法识别 @ v1 ,因为

用户定义的变量是特定于会话的,即,一个客户端定义的变量不会与其他客户端共享,并且在会话结束时,这些变量会自动失效。因此,当您输入半冒号时,下一个查询是另一个会话