存在一个users
包含 2 列的表的数据库,userId
并且saved
. userId
是一个简单的增量,saved
是 JSON 数据。
存在一行:
userId:1,保存:“{”value“:1}”
当以下代码在 Windows 上运行时
const mysql = require('mysql2');
async function start() {
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
database: 'database'
});
connection.query('SELECT saved FROM users WHERE userId = 1', function(err, results, fields) {
console.log(results);
})
}
start();
[ TextRow { saved: '{"value": 1}' } ]
在 Windows 上显示
[ TextRow { saved: { value: 1 } } ]
在 Linux 上显示
在 Linux 上解析我的 JSON 而不是在 Windows 上解析我的 JSON 究竟发生了什么?
MySQL版本都不同
mysql Ver 14.14 Distrib 5.7.33,适用于 Linux (x86_64)
mysql Ver 15.1 Distrib 10.4.17-MariaDB,适用于 Win64 (AMD64)
我不确定如何让它们都使用相同的版本。Windows 机器正在运行 XAMPP,看起来很麻烦。我现在正在尝试安装两者的相同版本。
该users
表是 InnoDB utf8mb4_general_ci
场地 | 类型 |
---|---|
用户身份 | 整数(10) |
已保存 | 长文本 utf8mb4_bin |
我实际上并没有将此代码用于任何事情,我使用 ORM 来执行此操作,但它使用 mysql2 进行查询,我将错误追溯到 mysql2 并只是从 GitHub 复制粘贴示例代码以测试它是否是罪魁祸首. 如果我真的在使用它,我会使用基于 Promise 的代码。
MySQL2 在两个平台上确实是相同的版本。2.2.5。
有趣的是,mysql 包不会出现这个问题。我认为这表明包装本身正在发生一些时髦的事情。