我有一个旧的源数据库,显然是在其中创建了自定义排序规则UTF8_CI_AI_NUMERIC_SORT。我是通过图像jacobalberty/firebird:2.5-ss在码头上运行的。数据库最初是在Windows机器上创建的。
当我试图对使用此排序规则的表执行查询时,会得到以下错误:
SQL> select * from "InvoiceService";
Statement failed, SQLSTATE = 22021
COLLATION UTF8_CI_AI_NUMERIC_SORT for CHARACTER SET UTF8 is not installed显示排序规则返回以下内容:
SQL> show collations;
UTF8_CI_AI_NUMERIC_SORT, CHARACTER SET UTF8, FROM EXTERNAL ('UNICODE'), CASE INSENSITIVE, ACCENT INSENSITIVE, 'NUMERIC-SORT=1'我尝试了以下修复方法:
将条目添加到fbintl.conf中
<charset UTF8>
intl_module fbintl
collation UTF8_CI_AI_NUMERIC_SORT
</charset>然后运行sp_register_character_set("UTF8", 4)过程,并接收有关重复排序规则的错误(因为UTF8_CI_AI_NUMERIC_SORT已经在DB中定义)。
SQL> drop collation UTF8_CI_AI_NUMERIC_SORT;
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-Collation UTF8_CI_AI_NUMERIC_SORT is used in table InvoiceService (field name NAME) and cannot be droppedSQL> ALTER TABLE "InvoiceService" ADD NAME2 VARCHAR(600) CHARACTER SET UTF8;
Statement failed, SQLSTATE = 22021
unsuccessful metadata update
-InvoiceService
-COLLATION UTF8_CI_AI_NUMERIC_SORT for CHARACTER SET UTF8 is not installedgbak还原元数据,修复模式,然后只插入数据,但gbak不支持只还原数据,只支持。
..。
我现在没有主意了。我还能做什么呢?
发布于 2021-08-31 09:32:32
所以,我终于解决了这个问题。我所做的是创建一个DB备份
gbak -v -t -user SYSDBA /path/to/source.fdb /path/to/backup.fbk然后将Docker映像的3.0版本与Firebird (jacobalberty/firebird:3.0)一起使用,然后用
gbak -create /path/to/backup.fbk /path/to/restored3.fdb请注意,没有切换Docker映像的相同备份还原过程无法工作。
我没必要做任何其他的事。在SHOW COLLATIONS;输出方面,只有细微的差别:
// originally:
UTF8_CI_AI_NUMERIC_SORT, CHARACTER SET UTF8, FROM EXTERNAL ('UNICODE'), CASE INSENSITIVE, ACCENT INSENSITIVE, 'NUMERIC-SORT=1'
// restored DB
UTF8_CI_AI_NUMERIC_SORT, CHARACTER SET UTF8, FROM EXTERNAL ('UNICODE'), CASE INSENSITIVE, ACCENT INSENSITIVE, 'COLL-VERSION=58.0.6.50;NUMERIC-SORT=1'https://stackoverflow.com/questions/68987597
复制相似问题