我用火鸟2.5.1与正常的Varchar ... 的话,我想升级使用Unicode的所有数据(访问德尔福XE2,dbExpress的) 我搜查,但没有很好的帮助.. 所以你能不能建议我如何将我的数据升级到unicode firebird? 非常感谢...祝您有个美好的一天。如何为Unicode数据升级Firebird?
0
A
回答
0
在Firebird中,您必须为每个varchar字段指定一个字符集。所以没有“正常”的varchar。如果您没有在CREATE TABLE语句中明确指定它,Firebird将使用数据库的默认字符集。
Firebird中有几个可用的字符集。可能你的意思是ASCII或ISO-Charset与“正常”。除了这些问题之外,Firebird支持UNICODE_FSS或UTF8。 可以更改数据库中字段的字符集。
首先,您必须找出您的首选字符集使用哪个ID。要做到这一点,您可以查看表格RDB $ CHARACTER_SETS
之后,您需要找出您想要更改的列使用的是哪个域。如果您未在CREATE TABLE语句中指定自定义域,则Firebird会为每列生成一个。
比你能在系统表中改变这个域的用过的字符集。
update RDB$FIELDS T1
set T1.RDB$CHARACTER_SET_ID = 4
where RDB$FIELD_NAME = (select RDB$FIELD_SOURCE
from RDB$RELATION_FIELDS T2
where T2.RDB$RELATION_NAME = 'NEW_TABLE'
and T2.RDB$FIELD_NAME = 'NEW_FIELD')
Alternativly你可以看看在系统表中的所有VARCHAR域和一个单语句改变它。
1
0
您可以使用以下方法:
- 扫描的字符串字段的数据库
- 对于每一个字符串字段创建每个表附加一个使用Unicode字符字段之间设置
- 复制数据
- 掉落原始字段
- 重命名临时字段
下面是用于数据转换的一个代码的示例:
EXECUTE BLOCK
AS
DECLARE VARIABLE fn CHAR(31) CHARACTER SET UNICODE_FSS;
DECLARE VARIABLE rn CHAR(31) CHARACTER SET UNICODE_FSS;
DECLARE VARIABLE cl INTEGER;
BEGIN
FOR
SELECT
r.rdb$field_name,
r.rdb$relation_name,
f.rdb$character_length
FROM
rdb$relation_fields r JOIN rdb$fields f
ON f.rdb$field_name = r.rdb$field_source
WHERE
f.rdb$character_set_id >= 10
AND f.rdb$character_length > 0
AND f.rdb$field_sub_type IS NULL
INTO :fn, :rn, :cl
DO BEGIN
EXECUTE STATEMENT 'ALTER TABLE "' || :rn ||
'" ADD unique_temp_field_name VARCHAR(' || :cl ||
') CHARACTER SET UNICODE_FSS'
WITH AUTONOMOUS TRANSACTION;
EXECUTE STATEMENT 'UPDATE "' || :rn ||
'" SET unique_temp_field_name = "' || :fn || '"'
WITH AUTONOMOUS TRANSACTION;
EXECUTE STATEMENT 'ALTER TABLE "' || :rn || '" DROP "' || :fn || '"'
WITH AUTONOMOUS TRANSACTION;
EXECUTE STATEMENT 'ALTER TABLE "' || :rn ||
'" ALTER unique_temp_field_name TO ' ||
'"' || :fn || '"'
WITH AUTONOMOUS TRANSACTION;
END
END
对于真实世界应用此代码应以被修改为:
- 转移字段约束和默认值
- 删除然后恢复使用字段转换的PK,FK,索引
- 下降和重新创建任何触发器或存储过程,它依赖于现场被转换
相关问题
- 1. 如何在数据库升级过程中保留和升级SQLITE数据库
- 2. 如何使用WIX升级数据库?
- 3. 如何升级sqlite数据库?
- 4. 如何升级sqlite数据库文件
- 5. 数据库升级方法
- 6. 升级黑莓数据库
- 7. Android:升级数据库
- 8. 如何在应用程序升级过程中升级我的数据库?
- 9. 如何升级sqlite数据库而不丢失数据?
- 10. 如何升级gfortran
- 11. 如何升级mysql?
- 12. 如何备份Firebird数据库?
- 13. 升级到Rails 3和Ruby 1.9和Postgres数据库中的Unicode数据现在返回为ASCII(潜在的bug?)
- 14. Soaarqube从3.7.2升级到4.4。数据库升级期间挂起
- 15. 使用已升级的代码升级ExpressionEngine数据库?
- 16. Moodle在升级数据库时清除缓存,不会让数据库升级
- 17. 成功升级后Android升级数据库不更新数据库版本
- 18. 如何升级条纹为TLS 1.2
- 19. 如何防止Firefox升级
- 20. 如何升级facebook-sdk-unity
- 21. 如何升级symfony2版本?
- 22. 如何升级管理gem
- 23. 你如何升级gitosis?
- 24. 如何升级jQuery Mobile Splitview?
- 25. CentOS 6.5 - 如何升级HAProxy?
- 26. 如何升级堆栈GHC
- 27. 如何升级omnibus gitlab 7.2.1?
- 28. mongodb:如何升级db?
- 29. WordPress如何处理升级?
- 30. 如何升级varchar(8000)?
如果你改变了使用的字符此域在系统表中设置:你没有在良好的字符集编码的数据! ! ! –
我试着用包含德文特殊字符的字符集WIN1252的列进行测试。将其更改为UNICODE_FSS后,仍然按预期工作。所以没有必要重新编码数据。 – Michael
非常感谢你.. –