我用火鳥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. 使用ant升級項目數據庫升級數據庫
- 6. Android:升級數據庫
- 7. SQLite數據庫升級
- 8. 數據庫升級方法
- 9. 無法升級數據庫
- 10. 升級黑莓數據庫
- 11. Android升級數據庫
- 12. 用戶數據升級
- 13. 如何在應用程序升級過程中升級我的數據庫?
- 14. 如何升級sqlite數據庫而不丟失數據?
- 15. Firebird數據庫不能識別Unicode字符
- 16. 如何升級bazel?
- 17. 如何升級libvirt?
- 18. 如何升級django?
- 19. 如何升級gfortran
- 20. 如何升級minikube?
- 21. 如何升級FirebaseListAdapter
- 22. 如何升級glassfish?
- 23. 如何升級mysql?
- 24. 如何備份Firebird數據庫?
- 25. 升級到Rails 3和Ruby 1.9和Postgres數據庫中的Unicode數據現在返回爲ASCII(潛在的bug?)
- 26. Soaarqube從3.7.2升級到4.4。數據庫升級期間掛起
- 27. 使用已升級的代碼升級ExpressionEngine數據庫?
- 28. 成功升級後Android升級數據庫不更新數據庫版本
- 29. Moodle在升級數據庫時清除緩存,不會讓數據庫升級
- 30. 如何升級應用爲ZBarSDK
如果你改變了使用的字符此域在系統表中設置:你沒有在良好的字符集編碼的數據! ! ! –
我試着用包含德文特殊字符的字符集WIN1252的列進行測試。將其更改爲UNICODE_FSS後,仍然按預期工作。所以沒有必要重新編碼數據。 – Michael
非常感謝你.. –