2013-10-10 101 views
5

我试图连接到从Linux客户端在Windows上运行的Firebird数据库,并试图武官我得到以下错误数据库时:火鸟CHARACTER SET UTF8没有定义

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

我用Google搜索并在这里搜索答案,但似乎无法找到解决方案。

如何任何建议,这可以从客户端来克服,或者是否需要DATABSE与支持UTF8重建?我使用节点JS与节点火鸟模块

客户端,服务器端引擎版本为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); 

    }) 
} 
+0

你用什么驱动器连接到服务器? –

+0

嗨,客户端我正在使用nodejs和node-firebird模块。 – crankshaft

+1

请包括您用于连接的代码,数据库的ODS版本和Firebird版本。 –

回答

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

注意,如果UTF8RDB$CHARACTER_SETS缺少这样只会解决您的问题。如果是这样,你应该问自己为什么它首先失踪。也许DBA或其他开发人员从RDB$CHARACTER_SETS中删除条目,如果是这样的话,找出原因可能是一个好主意。

例如:数据库可能使用NONE作为默认字符集(以及每列),这是一种确保人们只通过删除所有其他选项(一个正常的Firebird 2.5数据库包含RDB$CHARACTER_SETS中的52个条目)。如果是这样的话,请确保您有UTF8连接之前解决这个问题,否则你可能会由于不正确的音译经历某种形式的数据损坏的(在读或写时)。

解决这个问题的方法是使用正确的默认字符集(和列)创建一个新数据库,并将数据从旧数据抽取到新数据库中(确保读取和写入操作使用适当的字符组)。此后火鸟可以照顾数据库(或列)的字符集和连接字符集(与使用NONE作为连接字符集连接应用除外)之间的音译。