mariadb - Mariadb longtext union 总是返回空字符串
问题描述
表结构
| did (`int(11)`) | data (longtext) |
-------------------------------------
| 1 | `<h1>It Works</h1>` <-- encrypted |
.
.
.
我的查询
SET @_did = 1;
SET @_key = 'test';
SELECT
COUNT(*) AS cnt,
-1 AS did,
'' AS `data`
FROM
GROUP_DESIGN
WHERE
(
(@_did IS NOT NULL AND did = @_did)
OR (@_did IS NULL)
)
UNION ALL
SELECT
D_S.cnt,
D_S.did,
D_S.data,
FROM
(
SELECT
NULL AS cnt,
did,
CAST(AES_DECRYPT(UNHEX(`data`), SHA2(@_key,256)) AS CHAR) AS `data`
FROM
GROUP_DESIGN G_D
WHERE
(
(@_did IS NOT NULL AND did = @_did)
OR (@_did IS NULL)
)
ORDER BY
did DESC
) D_S;
预期行为
显示data
col 数据。
| cnt | did | data|
-------------------
| 1 | -1 | '' |
| null| 1 | <h1>It works!</h1> |
实际行为
| cnt | did | data|
-------------------
| 1 | -1 | '' |
| null| 1 | '' |
data
col 总是返回空字符串,如 ''。我检查的不是解密失败。
如果删除之前的计数查询UNION ALL
;
SELECT
COUNT(*) AS cnt,
-1 AS did,
'' AS `data`,
FROM
GROUP_DESIGN
WHERE
(
(@_did IS NOT NULL AND did = @_did)
OR (@_did IS NULL)
)
UNION ALL
它返回data
col ok。但是使用 count 查询data
col 总是返回空字符串。
环境
- mariadb:10.4(码头工人)
解决方案
至于NULL
测试...
(@_did IS NOT NULL AND did = @_did)
OR (@_did IS NULL)
由于= NULL
总是失败,可以简化为
(did = @_did)
至于
UNHEX(`data`)
假设data
是十六进制。也许您打算使用HEX()
? 为什么要费心去做呢?
至于
SHA2(@_key,256)
为什么不简单地使用@_key
?我不认为通过破坏钥匙可以获得任何东西。
推荐阅读
- r - 在数字和 NA 列表中获取元素权重
- cluster-analysis - 如何在 Sklearn 中使用带有混合(分类和数字)数据的 silhouette_score?
- asp.net-mvc - (MVC) 我的共享 _Layout 中有一个搜索栏。它适用于其他视图,但不适用于 _Layout
- php - return redirect('/') 和 Redirect::to('/')->send() 有什么区别?laravel 中的函数
- snowflake-cloud-data-platform - 用于雪花的 Kafka 连接器不断失败
- node.js - 错误 node_modules/jest-diff/build/diffLines.d.ts(8,13): 错误 TS1005: '=' 预期。在嵌套js中
- amazon-web-services - 如何通过 AutoScaling 动态增加 AWS EMR 上的 ulimit?
- clone - 乐克隆物体没有沉没
- django - 如何在 Django 中以编程方式将用户添加到组
- javascript - 我希望选择 HTML 表格单元格并在屏幕上可见