Firebird CHARACTER SET UTF8未定义

时间:2013-10-10 01:42:06

标签: node.js firebird

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

    })
}

1 个答案:

答案 0 :(得分: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数据库包含RDB$CHARACTER_SETS中的52个条目。如果是这种情况,请确保在连接UTF8之前解决此问题,否则您可能会因错误的音译而遇到某种形式的数据损坏(读取或写入时)。

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