NodeJS 未定义Firebird字符集UTF8

bq8i3lrv  于 2023-01-25  发布在  Node.js
关注(0)|答案(2)|浏览(164)

我试图从linux客户端连接到运行在windows中的firebird数据库,当尝试附加数据库时,我收到以下错误:

bad parameters on attach or create database, CHARACTER SET UTF8 is not defined

我已经在谷歌上搜索了答案,但似乎找不到解决方案。
关于如何从客户端克服这个问题,或者它需要用UTF8支持重建数据库,有什么建议吗?
客户端我使用node-js和node-firebird模块,服务器端引擎版本是2.5,ODS版本是11.2

function dbConnect(cb){
    fb.attach({
        host: '192.168.42.233',
        database: 'gi',
        user: 'SYSDBA',
        password: 'xxxxx'
    }, function(err, db){
        if (err) console.log(err.message);
        else cb(db);

    })
}
qrjkbowd

qrjkbowd1#

Harriv的评论促使我验证我的想法,这可能是由于RDB$CHARACTER_SETS中缺少一个条目引起的。如果我从这个系统表中手动删除UTF8,当我尝试连接UTF8时,我会得到同样的错误:

SQL Message : -924
Connection error

Engine Code    : 335544325
Engine Message :
bad parameters on attach or create database
CHARACTER SET UTF8 is not defined

解决方案是备份数据库并再次恢复,这将重新创建RDB$CHARACTER_SETS系统表以再次包含UTF8
注意,只有当RDB$CHARACTER_SETS中缺少UTF8时,这才能解决您的问题。如果是这样,您应该首先问问自己为什么缺少它。也许DBA或其他开发人员从RDB$CHARACTER_SETS中删除了条目,如果是这样,找出原因可能是一个好主意。
例如:数据库可能使用NONE作为缺省字符集(并且适用于每一个专栏),这是一种通过删除所有其他选项来确保人们只与"正确"的字符集联系的方法(一个正常的Firebird 2.5数据库在RDB$CHARACTER_SETS中包含52个条目)。如果是这种情况,请确保在连接UTF8之前修复此问题,否则,您可能会遇到不正确的音译导致的某种形式的数据损坏(在读取或写入时)。
解决方法是使用正确的缺省字符集创建一个新数据库(以及对于柱),把数据从旧的传输到新的(确保读写是用适当的字符集完成的)。之后Firebird可以处理数据库之间的音译(或列)字符集和连接字符集(使用NONE作为连接字符集进行连接的应用程序除外)。

ljsrvy3e

ljsrvy3e2#

我添加到选项编码键'NONE'选项。encoding = 'NONE'

相关问题