我试图从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);

    })
}

最佳答案

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作为连接字符集进行连接的情况除外)。

关于node.js - 未定义Firebird CHARACTER SET UTF8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19285692/

10-15 15:00