我试图从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);
})
}
2条答案
按热度按时间qrjkbowd1#
Harriv的评论促使我验证我的想法,这可能是由于
RDB$CHARACTER_SETS
中缺少一个条目引起的。如果我从这个系统表中手动删除UTF8
,当我尝试连接UTF8
时,我会得到同样的错误:解决方案是备份数据库并再次恢复,这将重新创建
RDB$CHARACTER_SETS
系统表以再次包含UTF8
。注意,只有当
RDB$CHARACTER_SETS
中缺少UTF8
时,这才能解决您的问题。如果是这样,您应该首先问问自己为什么缺少它。也许DBA或其他开发人员从RDB$CHARACTER_SETS
中删除了条目,如果是这样,找出原因可能是一个好主意。例如:数据库可能使用
NONE
作为缺省字符集(并且适用于每一个专栏),这是一种通过删除所有其他选项来确保人们只与"正确"的字符集联系的方法(一个正常的Firebird 2.5数据库在RDB$CHARACTER_SETS
中包含52个条目)。如果是这种情况,请确保在连接UTF8
之前修复此问题,否则,您可能会遇到不正确的音译导致的某种形式的数据损坏(在读取或写入时)。解决方法是使用正确的缺省字符集创建一个新数据库(以及对于柱),把数据从旧的传输到新的(确保读写是用适当的字符集完成的)。之后Firebird可以处理数据库之间的音译(或列)字符集和连接字符集(使用
NONE
作为连接字符集进行连接的应用程序除外)。ljsrvy3e2#
我添加到选项编码键'NONE'选项。encoding = 'NONE'