2017-07-19 37 views
1

Firebirdデータベースには、文字セットWIN1251があります。データベースにはすでに複数のテーブルがあります。今度はデフォルトの照合順序をWIN1251_UAに変更したいと思います。だから私はこの文を実行していた:Firebirdデータベースとテーブルのデフォルトの照合順序を変更します。

ALTER CHARACTER SET WIN1251 SET DEFAULT COLLATION WIN1251_UA 

上記this linkのクエリによると、データベースの既定の照合順序を変更します。

私は問題に直面しました。すべてのテーブルについて、すべてvarcharフィールドには依然として照合WIN1251があります。既存のすべてのテーブルのデフォルトの照合順序を変更するにはどうすればよいですか?

追加情報:Firebird 2.5が使用されます。

+0

非常に高速ではないにしても、最も信頼できるのは、新しい文字セットで新しい列を作成し、古い列の内容をコピーし、古い列を削除し、新しい列を古い名前に変更することです。http://www.sql.ruを参照してください。/forum/297195 –

+0

@Ariochこれにはテーブルが多すぎます。 – Evgeny

+0

それらを列挙し、スクリプトを自動作成します –

答えて

0

列の照合順序を変更することはできません。新しい列を作成してデータをコピーするか、正しいDDLで新しい空のデータベースを作成し、データベースポンプを使用してデータを移動させる必要があります。

this thread in Firebird-supportも参照してください。

+0

それは本当ではありません。もちろん、私は照合を変更することができます。私の答えを見てください。 – Evgeny

0

データベースのSQLダンプを作成するために、IBExpertとそのibeblockを使用するとどうなりますか?あなたが作成したときには、変更内容を変更するだけです。

ようibeblockの例:

execute ibeblock 
as 
begin 
cbb = 'execute ibeblock (
     LogLine variant) 
    as 
    begin 
     ibec_progress(LogLine); 
    end'; 

DB = ibec_CreateConnection(__ctInterBase, 
         'DBName="127.0.0.1:mydatabase"; 
          ClientLib=gds32.dll; 
          User=SYSDBA; Password=masterkey; Names=WIN1251; SqlDialect=3'); 
    try 
    ibec_ExtractMetadata(DB, 'c:\test\db.sql', 
         'GenerateCreate; 
          IncludePassword; 
          SetGenerators; 
          ExtractDescriptions; 
          UseComment; 
          ExtractBLOBs; 
          DateFormat=YYYY-MM-DD; 
          DateTimeFormat=YYYY-MM-DD HH:NN:SS; 
          DataTables=MY_TABLE1,MY_TABLE2', 
          cbb); 
    finally 
    ibec_CloseConnection(DB); 
    end; 
end; 
+0

Tnx。しかし、私はよりよい解決策を見つけました。私の答えを見てください。 – Evgeny

+0

これまでのところfb25でシステムテーブルを更新できますが、残念ながら... –

0

最後に、私は解決策を見つけました。たとえば、すべてのテーブルのすべてのtxtフィールドの照合順序を変更したい場合私はこのクエリでこれを行うことができますいくつかのテーブル内のtxtフィールドが整合性制約の一部である場合、上記

update RDB$RELATION_FIELDS set 
RDB$COLLATION_ID = 2 
where rdb$view_context is null and rdb$field_name='TXT'; 

もちろん、クエリが失敗します。

このようにして、sort節で使用された他のフィールドを変更することができます。

+0

システムテーブルの更新はハックです。これはFirebird 3では動作しません。システムテーブルの変更はもはや許可されていません。以前のバージョンでは、フィールドにインデックスがあり、制約などをチェックしたり、ビューまたはストアドプロシージャ –

関連する問題