Adakus:
一つのフィールドがあり、私たちはテーブルのアカウントを持っていると仮定 acct_type varchar(2)
Insert into account(acct_type) values(888)
出力:
+-----------+
| acct_type |
+-----------+
| * |
+-----------+
私はそれがエラー挿入文トリガーがスローされます期待しています。なぜそれが格納しています*
テーブル内の値を?
マーティン・スミス:
以下のためvarchar
のデータ型切り捨てint
としてキャストされる*
代わりに、(3桁がに収まらないとして、この場合にエラーをスローしますvarchar(2)
)。
これは、と発生しません。 nvarchar
この動作を変更する方法はありません、それは後方互換性のために保存されます。これはあなたのための現実的な問題である場合は、列の値がないことをチェック制約を追加することができます*
が、私は、これはやって本当に価値があるどのような状況を想像することはできません。
解決策は、それを行うだけではありません。あなたが挿入する必要がある場合はINT
、それが範囲内にある検証-9 to 99
最初。または、常に文字列カラムではなく、暗黙の型変換に頼る宛ての値の前後に引用符を使用します。