Nodejs 关于node-oracle 乱码的问题

Nodejs 关于node-oracle 乱码的问题

在linux 系统中用node-oracle模块查询数据库,返回结果如果中文字段出来的都是显示??? 其他字段的没问题, 已经设置过 export NLS_LANG=AMERICAN_AMERICA.UTF8 有没有人知道怎么解决?

5 回复

在Linux系统中使用node-oracledb(旧名为node-oracle)模块查询Oracle数据库时,遇到中文字符显示为问号(???)的问题,通常是因为字符编码不匹配导致的。尽管你已经设置了export NLS_LANG=AMERICAN_AMERICA.UTF8环境变量,但还需要确保在Node.js应用程序中正确处理字符编码。

解决方案

  1. 确保NLS_LANG设置正确:虽然你已经在命令行中设置了NLS_LANG,但是确保在Node.js应用启动前这个环境变量已经被正确设置。你可以通过以下方式在Node.js脚本开始处手动设置:

    process.env.NLS_LANG = 'AMERICAN_AMERICA.UTF8';
    
  2. 使用正确的编码进行数据处理:确保在读取和写入数据库时使用UTF-8编码。这包括确保数据库连接配置正确。

  3. 检查数据库连接字符串:确保在连接到Oracle数据库时,使用了正确的字符集参数。例如,在创建数据库连接时,可以指定字符集:

    const oracledb = require('oracledb');
    
    async function runQuery() {
        let connection;
    
        try {
            // 设置连接字符串以使用UTF-8字符集
            connection = await oracledb.getConnection({
                user: 'your_username',
                password: 'your_password',
                connectString: 'your_connection_string',
                charset: 'AL32UTF8' // 指定字符集为UTF-8
            });
    
            const result = await connection.execute(
                'SELECT * FROM your_table'
            );
            console.log(result.rows);
        } catch (err) {
            console.error(err);
        } finally {
            if (connection) {
                try {
                    await connection.close();
                } catch (err) {
                    console.error(err);
                }
            }
        }
    }
    
    runQuery();
    
  4. 确保数据库表和列的字符集:最后,确认你的Oracle数据库表和列定义中使用的字符集也是UTF-8。

通过上述步骤,你应该能够解决在使用node-oracledb模块查询Oracle数据库时出现的中文乱码问题。如果问题仍然存在,建议检查数据库服务器的配置以及网络传输过程中是否有字符编码转换的问题。


添加:export LANG=enUS.UTF-8 看看是否生效 如果是用终端连接,试着修改一下终端的字符编码到UTF8。

数据库编码估计是GBK格式

问题解决了… 添加一个环境变量就行了.添加一个永久的环境变量 NLS_LANG=“AMERICAN_AMERICA.UTF8”

在使用 node-oracle 模块查询数据库时遇到乱码问题,通常是因为数据库字符集设置不匹配或者环境变量未正确配置。您提到已经设置了 export NLS_LANG=AMERICAN_AMERICA.UTF8,但仍然存在乱码问题。以下是一些可能的解决方案:

  1. 确保 NLS_LANG 设置正确

    • 确认 NLS_LANG 环境变量在运行 Node.js 进程之前已设置。
    • 例如,在启动 Node.js 应用之前,可以在命令行中设置:
      export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
      node your-app.js
      
    • 注意 AL32UTF8 是 Oracle 中常用的 UTF-8 字符集。
  2. 检查数据库字符集

    • 确保数据库使用的字符集与 NLS_LANG 设置匹配。可以使用 SQL 查询来确认数据库字符集:
      SELECT parameter, value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
      
  3. Node.js 连接字符串配置

    • 在连接 Oracle 数据库时,确保使用正确的字符集配置。虽然 node-oracle 不直接支持设置字符集,但可以通过传递正确的环境变量来间接影响。
    • 示例代码:
      const oracledb = require('oracledb');
      
      async function run() {
        process.env.NLS_LANG = 'AMERICAN_AMERICA.AL32UTF8'; // 设置环境变量
        try {
          let connection = await oracledb.getConnection({
            user: "your_user",
            password: "your_password",
            connectString: "your_connect_string"
          });
      
          const result = await connection.execute("SELECT * FROM your_table");
          console.log(result.rows);
        } catch (err) {
          console.error(err);
        } finally {
          if (connection) {
            try {
              await connection.close();
            } catch (err) {
              console.error(err);
            }
          }
        }
      }
      
      run();
      

通过以上步骤,应该能够解决由于字符集不匹配导致的乱码问题。如果问题依然存在,请检查数据库表和列的字符集设置是否一致。

回到顶部