5

我正在尝试从 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);

    })
}
4

1 回答 1

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

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

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

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

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

于 2013-10-11T13:35:52.607 回答