gpt4 book ai didi

mysql - 为什么 MySQL 在查询结果末尾添加不必要的填充?

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

我正在从 MySQL 数据库查询数据,但填充被附加到数据末尾,超出了字段的总长度。

它使用 mysql/xdevapi package 在 Node.js 中运行并查询MySQL Server 8.0.16社区。所选列定义为 accessKey CHAR(6)。 通过 MySQL Workbench 查看数据,填充不存在,这让我认为这是 xdevapi 包中某处的问题。

我使用的查询是:

SELECT accessKey, date FROM datasets WHERE authString = '<string we're searching by>';

该查询实际使用的 JS 是:

let query = database.getTable('datasets').select('accessKey','date').where('authString = :auth').bind('auth', authString);
await query.execute(row =>
{
if (!Array.isArray(data)) data = [];
let cDate = new Date(row[1]);
console.log(row[0]);
data.push([
row[0].slice(0, 6), //Manually trim padding
cDate.toDateString()
]);
});

console.log() 将以下内容打印到控制台:

1af55d000000000000
1d4da5000000000000
48e027000000000000
2a148d000000000000
255d4c000000000000

这些值是正确的,只是附加了额外的 0。预期结果只是前 6 个字符。

最佳答案

这里发生了两件事。

首先是您正在使用固定长度列数据类型CHAR(n),它由 X Protocol 指定。 ,当结果集值的长度小于为列数据类型定义的固定长度(以字节为单位)时,将需要额外的填充。

第二个是填充字符在您的情况下可能不正确(如果您使用 utf8mb4 字符集),它应该是 ' ' 而不是0x00,这是一个错误。

另一件事是 utf8mb4 字符集定义每个字符 4 个字节,这意味着以字节为单位的实际字段长度将是 24 个字节,并且您的情况下的预期输出将是:

'1af55d                  ' 
'1d4da5 '
'48e027 '
'2a148d '
'255d4c '

这可能有点奇怪,并且将来有可能改变。但是,至少在这种情况下,您可以使用 .trim() 并且不关心值的长度。在它发生变化或错误得到修复之前,您始终可以使用 VARCHAR 来防止这种情况发生。

免责声明:我是 Node.js 的 MySQL X DevAPI 连接器的首席开发人员

关于mysql - 为什么 MySQL 在查询结果末尾添加不必要的填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56972638/

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