1

私はこれと同じ問題を抱えています:

SQLを使用して、DerbyでVARCHARをテーブルフィールドの長さに自動的に切り詰めるにはどうすればよいですか?

具体的には:

CREATE TABLE A ( B VARCHAR(2) ); AB 値に挿入 ('1234'); SQLException をスローします。

VARCHAR '123' を長さ 2 に縮小しようとして、切り捨てエラーが発生しました。

それはすでに答えられています:

いいえ、メタデータを確認してから切り落とす必要があります。または、毎回メタデータをチェックしたくない場合は、コードとデータベースの両方を同期させる必要があります。しかし、それは大したことではなく、バリデーターの通常のやり方です。

しかし、私の疑問は次のとおりです。VARCHARは、データに合わせてサイズを変更することを想定していませんか? apache derby の VARCHAR の何が問題になっていますか?

4

2 に答える 2

3

VARCHAR タイプ可変長ですが、その定義で指定する数は、使用できる最大文字数です。

VARCHAR(2)CHAR(2)は、実際のデータに関係なく 2 文字を格納するのに対し、0 ~ 2 文字の値を格納します。

補足: 255 文字になったら、TEXT代わりに type を使用することを検討してください。

于 2010-05-18T15:45:16.103 に答える
3

いいえ、あなたが説明することはそれとは何の関係もありません: varchar はスペースで埋められません、char はスペースで埋められます

あなたが持っているなら

CREATE TABLE A ( B VARCHAR(20) ); INSERT INTO A B VALUES ('1234')

20バイトではなく4バイトを使用しますが、その列に20文字を超える文字を入れることはできません。挿入する前に確認するか、LEFT(val,2)関数などを使用してください

しかし、データが適合せず、切り捨てられていることを知りたくないでしょう。結局のところ、最も重要なことはあなたのデータです...あなたのデータに問題がある場合、あなたには何もありません

SQL Server には、使用できる設定があり、これが自動的に実行されます。「ANSI WARNINGS 設定で文字列またはバイナリ データが切り捨てられるメッセージを抑制する」を参照してください。

基本的に SET ANSI_WARNINGS OFF が必要ですが、それがあなたのDBで機能するかどうかはわかりません

于 2010-05-18T15:36:32.630 に答える