Firebird CHARACTER SET UTF8未定义

cra*_*aft 5 firebird node.js

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

  bad parameters on attach or create database, CHARACTER SET UTF8 is not defined
Run Code Online (Sandbox Code Playgroud)

我在谷歌搜索并搜索了答案,但似乎无法找到解决方案.

有关如何从客户端克服此问题的任何建议,还是需要使用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);

    })
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*eel 2

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
Run Code Online (Sandbox Code Playgroud)

解决办法是备份数据库并重新恢复。这将重新创建RDB$CHARACTER_SETS系统表以再次包含UTF8

请注意,这只能解决您的问题(如果UTF8缺少)RDB$CHARACTER_SETS。如果确实如此,您应该首先问自己为什么它丢失了。也许 DBA 或其他开发人员从 中删除了条目RDB$CHARACTER_SETS,如果是这样,找出这样做的原因可能是个好主意。

例如:也许数据库使用NONE默认字符集(并且对于每一列),这是一种通过删除所有其他选项来确保人们仅与“正确”字符集连接的方法(普通的 Firebird 2.5 数据库包含 52 个条目RDB$CHARACTER_SETS) 。如果是这种情况,请确保在连接之前解决此问题UTF8,否则您可能会因不正确的音译而遇到某种形式的数据损坏(在读取或写入时)。

解决此问题的方法是创建一个具有正确默认字符集(以及列)的新数据库,并将数据从旧数据库泵送到新数据库(确保使用适当的字符集完成读写)。NONE之后,Firebird 可以负责数据库(或列)字符集和连接字符集之间的音译(使用连接字符集进行连接的应用程序除外)。