Firebird 2.5 にデータが入ったデータベースがあります。UTF-8
文字セットをからに変更する必要がありますISO8859_1
。
alter database default character set ISO8859_1 collation ES_ES
しかし、うまくいきません。文字セットを変換するにはどうすればよいですか?
Firebird 2.5 にデータが入ったデータベースがあります。UTF-8
文字セットをからに変更する必要がありますISO8859_1
。
alter database default character set ISO8859_1 collation ES_ES
しかし、うまくいきません。文字セットを変換するにはどうすればよいですか?
デフォルトの文字セットを変更すると、変更後に (明示的な文字セットなしで)作成された列にのみ影響します。文字セットは個々の列のプロパティであるため、既存の列は影響を受けません。これは、すべての (関連する) 列を変更する必要があることを意味します。
いくつかの問題があります
NONE
または以外OCTETS
) を持っている場合にのみ正しく機能します。別の文字セットからの変換、NONE
またはOCTETS
別の文字セットへの変換は、文字列変換エラー、またはコンテンツが期待と一致しないためにガベージが発生するか、ターゲット文字セットの無効なバイトになる可能性があります。これらの問題に対処するには、次のことができます。
UPDATE table SET newcolumn = oldcolumn
(または oldcolumn がNONE
orの場合OCTETS
:UPDATE table SET newcolumn = cast(cast(oldcolumn as VARCHAR(...) CHARACTER SET assumedcharset) as VARCHAR(...) CHARACTER SET targetcharset)
この 2 番目のオプションは、(テーブル、列、および依存関係に関して) 小さなデータベースを変更する場合、または奇妙な変換を実行する必要がある場合にのみ推奨されます。それ以外の場合は、データ ポンピング ソリューションを使用することを強くお勧めします。
ALTER CHARACTER SET ISO8859_1
SET default COLLATION ES_ES;
変更したいアクティブなデータベースに対してこれをスクリプト実行してください!