Firebird 2.5 Docker环境下UTF8_CI_AI_NUMERIC_SORT排序规则缺失报错如何解决
可行解决方法
方案1:修正排序规则加载配置(优先尝试)
你遇到的报错本质是Linux环境大小写敏感+Firebird实例未正确加载配置的排序规则,你之前的操作只差1步即可完成修复:
- 确认你修改的是容器内正确路径的
fbintl.conf:jacobalberty/firebird:2.5-ss镜像的配置文件默认路径为/firebird/etc/fbintl.conf,不要修改宿主机无关路径的配置 - 配置内容要保证排序规则名称和数据库内定义的大小写完全一致,你当前填写的配置内容是正确的,无需调整
- 配置完成后直接重启容器即可,不要执行
sp_register_character_set存储过程:该存储过程用于向数据库新增未存在的字符集/排序规则元数据,你的数据库已经存在该排序规则的定义,执行只会报重复错误 - 重启后再次执行查询验证即可
方案2:Windows端预处理后再迁移
如果方案1执行后仍报错,可以回到原Windows环境操作:
- 在Windows的原Firebird实例中正常打开数据库
- 逐表修改所有使用
UTF8_CI_AI_NUMERIC_SORT排序规则的字段,将排序规则改为UTF8默认的UTF8或者系统自带的UTF8_CI_AI - 删除数据库内的自定义排序规则
UTF8_CI_AI_NUMERIC_SORT - 重新用
gbak做全量备份,将备份文件拿到Docker环境恢复即可
方案3:元数据修改后手动迁移数据
如果你无法访问原Windows环境,可以用该方案:
- 对当前Docker中的数据库执行全量备份:
gbak -b -user sysdba -password masterkey 你的数据库文件路径 备份文件路径
- 新建一个空的Firebird数据库,执行仅恢复元数据的操作:
gbak -c -m -user sysdba -password masterkey 备份文件路径 新数据库文件路径
- 连接新数据库,手动修改所有表的字段排序规则,删除自定义的
UTF8_CI_AI_NUMERIC_SORT排序规则 - 使用FlameRobin、DBeaver等数据库管理工具,连接新旧两个数据库,逐表将旧库的数据导入到新库即可,无需依赖
gbak做数据恢复
内容的提问来源于stack exchange,提问作者DekiChan
相关产品推荐
相关产品推荐

