我在启动Firebird连接时遇到了一些麻烦,这似乎与编码有关。我正在这样连接数据库(local_copy
是/path/to/database.fdb
):
conn = fdb.connect(dsn=local_copy, user='****', password='****', charset="ISO8859_1")
仅适用于某些字符集。我需要拥有ISO8859_1
字符集,该字符集以前曾可用,但现在不再可用(可能是由于更新)。
Traceback (most recent call last):
File "sync.py", line 10, in <module>
conn = fdb.connect(dsn=local_copy, user='**', password='**', charset="ISO8859_1")
File "/usr/local/lib/python3.6/site-packages/fdb/fbcore.py", line 848, in connect
"Error while connecting to database:")
fdb.fbcore.DatabaseError: ('Error while connecting to database:\n- SQLCODE: -924\n- bad parameters on attach or create database\n- CHARACTER SET ISO8859_1 is not defined', -924, 335544325)
当我使用ISO88591
时,连接有效,但是Python对此不满意:
Traceback (most recent call last):
File "sync.py", line 10, in <module>
conn = fdb.connect(dsn=local_copy, user='***', password='***', charset="ANSI")
File "/usr/local/lib/python3.6/site-packages/fdb/fbcore.py", line 826, in connect
no_reserve, db_key_scope, no_gc, no_db_triggers, no_linger)
File "/usr/local/lib/python3.6/site-packages/fdb/fbcore.py", line 759, in build_dpb
dpb.add_string_parameter(isc_dpb_user_name, user)
File "/usr/local/lib/python3.6/site-packages/fdb/fbcore.py", line 624, in add_string_parameter
value = value.encode(charset_map.get(self.charset, self.charset))
LookupError: unknown encoding: ISO88591
因此,我认为向Python添加别名ISO88591
可能会起作用。我尝试编辑/usr/lib64/python3.6/encodings/aliases.py
,但这似乎没有任何效果。
答案 0 :(得分:2)
作为在Firebird支持上发布的内容的简短摘要,看起来CentOS上Firebird 2.5.8中的fbintl
模块已损坏。
如Philippe Makowski所述:
对不起,它坏了,我不知道如何解决: https://bugzilla.redhat.com/show_bug.cgi?id=1636177
但是Firebird 3还可以 https://copr.fedorainfracloud.org/coprs/makowski/firebird/
https://bugzilla.redhat.com/show_bug.cgi?id=1636177中建议的一种可能的解决方法是降级到2.5.7,或者继续使用2.5.8,但将其fbintl
模块替换为2.5.7中的模块。