web-dev-qa-db-ja.com

既存のSQL Server 2005データベースでデータ型varcharをnvarcharに変更します。問題はありますか?

中国語の文字をサポートするために、データベーステーブルの列のデータ型をvarcharからnvarcharに変更する必要があります(現在、これらの文字を持つvarcharフィールドは疑問符のみを表示しています)。

値を変更する方法は知っていますが、変更しても安全かどうかを確認したいと思います。変更を行う前に注意すべき点はありますか?ありがとう!

27
proggrock

この変更はデータサイズの更新であることに注意してください。 フードの下のSQL Serverテーブル列 を参照してください。この変更により、新しいNVARCHAR列が追加され、古いVARCHARから新しいNVARCHAR列にdtaをコピーして各行が更新され、古いVARCHAR列がドロップされたものとしてマークされます。テーブルが大きい場合、これにより大きなログが生成されるため、そのために準備してください。更新後、 DBCC CLEANTABLE は、以前のVARCHAR列で使用されていたスペースを再利用します。余裕があれば、ALTER TABLE ... REBUILDは、スペースを再利用するだけでなく、物理的に削除されたVARCHAR列も完全に削除します。最初のリンクされた記事に詳細があります。

また、テーブルで nicode Compression を有効にすることもできます。

32
Remus Rusanu

主キー以外のフィールドで実行できます。

ALTER TABLE [TableName]
ALTER COLUMN [ColumnName] nvarchar(N) null

主キーフィールドでは機能しません-テーブルを再作成する必要があります

30
Lucas

VARCHARの最大値は8000で、NVARCHARは4Kだけなので、長さが4000を超えないようにしてください。

7
Garrett Vlieger

テーブルが大きくなります。列の各文字は、保存に2倍のスペースを必要とします。テーブルが本当に大きくない限り気付かないかもしれません。

列データを処理するストアドプロシージャ/ビュー/クエリは、nvarcharを処理するために変更する必要がある場合があります。

3
Scott Bruns

ストアドプロシージャ、関数、このテーブルに基づく一時テーブル、および挿入/更新などに使用される変数もNVARCHARに更新する必要があるため、このテーブルのすべての依存関係を確認してください。また、テーブルが複製されているかどうかを確認してください!それはあなたに新しい問題を引き起こす可能性があります!

2
Andy Robertson