火鸟字符集UTF8未定义

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

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

我已经search了这里的答案,但似乎无法find解决办法。

有关如何从客户端克服的build议,还是需要用UTF8支持重build数据库?

客户端我使用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的评论促使我testing了我的想法,认为这可能是由RDB$CHARACTER_SETS缺less的项引起的。 如果我从这个系统表中手动删除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 

解决scheme是备份数据库并重新恢复。 这将重新创buildRDB$CHARACTER_SETS系统表再次包含UTF8

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

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

解决这个问题的方法是用正确的默认字符集(和列)创build一个新的数据库,并将数据从旧到新(确保读写使用适当的字符集)。 之后,Firebird可以在数据库(或列)字符集和连接字符集之间进行音译(除了使用NONE作为连接字符集连接的应用程序之外)。