我正在尝试连接到从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);
})
}
答案 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
作为连接字符集连接的应用程序之外)。