1

存在一个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 包不会出现这个问题。我认为这表明包装本身正在发生一些时髦的事情。

4

0 回答 0