首页 > 解决方案 > NodeJS mssql库向数据库插入奇怪的特殊字符

问题描述

我尝试使用 nodeJS 中的 mssql 将记录插入到我的表中。我的参数product_code = "0123456789"是一个字符串。我在插入表之前检查了它,但是在运行查询之后,如果我将该字段格式化为 varchar(30),则数据库中出现的记录是“?0123456789”。如果我将其重新格式化为 nvarchar(30),它将显示为“ÿ0123456789”。我不知道为什么它只发生在这个参数上。我试图找出3个原因:

  1. 我的代码问题:我在 tmux 会话中使用 vim。我试图列出所有隐藏的字符,set list; set listchars=tab:→\ ,nbsp:␣,trail:•,eol:¶,precedes:«,extends:» 但没有发现任何奇怪的东西
  2. 我的数据库服务器问题:这个问题以前从未发生过,我对数据库服务器一无所知,也没有专业知识来弄清楚它会发生什么。我们使用远程数据库服务器,它在 Windows 服务器上运行 Microsoft SQL。如果你有一些线索,请给我一些关键词来谷歌它。
  3. 我的网络问题:我的 Debian 10 操作系统是否有病毒?我ssh到我的后端服务器并启动 tmux 会话,并将 vim 作为文本编辑器运行。我使用这种方法数千小时,但我第一次遇到这个问题。

let pool;

exports.DB = MSSQL;

exports.init = async function(){
    const DB_HOST = process.env.DB_HOST;
    const DB_USER = process.env.DB_USER;
    const DB_PASS = process.env.DB_PASS;
    const DB_DATABASE = process.env.DB_DATABASE;

    const config = {
        user: DB_USER,
        password: DB_PASS,
        server: DB_HOST,
        database: DB_DATABASE,
        options: {
            //encrypt: true // Use this if you're on Windows Azure
        }
    }
    
    console.log("DATABASE:");
    console.log("Host: " + DB_HOST);
    console.log("User: " + DB_USER);
    console.log("Database: " + DB_DATABASE);

    try{
        pool = await MSSQL.connect(config);
    }catch(error){
        console.log("DATABASE: Failed to connect to SQL Server");
    }

    if(pool){
        console.log("DATABASE: Connected");
    }
}

exports.getPool = function(){
    return pool;
}

myFunct = async function(product_code, other_param){
    try {
    console.log("product_code");
    console.log(typeof product_code);
    console.log(product_code);

        const pool = MSSQL.getPool();
        await pool.request().input('other_field', other_param).input('product_code', product_code).query("INSERT INTO my_database_table (product_code, other_field) VALUES(@product_code, @other_field);");

        return {
            result: true
        }
    } catch (error) {
        console.trace(error);
        console.log("myFunct: " + error);
        return {
            result: false,
            error: ERROR.SYSTEM
        }
    }
}```

标签: node.jssql-serverexpress

解决方案


推荐阅读