我正在尝试为这样的用户定义变量分配值:
SET @v1='name_to_filter';
SELECT *
FROM mytable
WHERE column=@v1;
问题是此代码返回0行,但是如果不声明此变量,我将要过滤的名称放在代码返回几行的位置:
SELECT *
FROM mytable
WHERE column='name_to_filter';
因此变量没有保存我分配给它的名称,我在做什么错了?
答案 0 :(得分:1)
用户定义变量的排序规则默认为连接排序规则,该排序规则与您尝试比较的列的排序规则不同。结果,mysql无法正确进行比较,因此会引发错误。
一种解决方案是更改连接排序规则以匹配您的列排序规则。在其余部分之前运行此语句:
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
要确认列的排序规则,可以使用以下语句:
SHOW FULL COLUMNS FROM tablename
它将返回一个名为Collation的列
答案 1 :(得分:0)
SELECT @v1 = 'good',price1 FROM test.classification
where type = @v1;
输入此代码时:
set @v1 = 'what ever';
然后在此之后的下一个查询无法识别 @ v1 ,因为
用户定义的变量是特定于会话的,即,一个客户端定义的变量不会与其他客户端共享,并且在会话结束时,这些变量会自动失效。因此,当您输入半冒号时,下一个查询是另一个会话