web-dev-qa-db-ja.com

列のデータが切り捨てられましたか?

Twilio呼び出し id(34文字の文字列)を保存するためにMySql列のデータ型を変更した後、次のようにしてその列のデータを手動で変更しようとします:

update calls 
   set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d' 
 where id='1';

ただし、列のデータ型が適切に変更されたために、意味のないエラーが発生しますか?

| Level ||| Code | Message| Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1

63
Zagstrug

あなたの問題は、現時点でincoming_CidカラムがCHAR(1)である必要があるときにCHAR(34)として定義されていることです。

これを修正するには、このコマンドを発行して列の長さを1から34に変更します。

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);

ここにSQLFiddleデモ

68
peterm

このステートメントを発行することにより:

ALTER TABLES call MODIFY incoming_Cid CHAR;

...長さパラメータを省略しました。したがって、クエリは次と同等でした:

ALTER TABLE calls MODIFY incoming_Cid CHAR(1);

1より大きいサイズのフィールドサイズを指定する必要があります。

ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
7
RandomSeed

ただし、列のデータ型が適切に変更されたために、意味のないエラーが発生しますか?

| Level | Code | Msg | Warn | 12 | Data truncated for column 'incoming_Cid' at row 1

次のようなことをしているときに、このメッセージを受け取ることがよくあります。

REPLACE INTO table2 (SELECT * FROM table1);

この場合、次のエラーが発生しました。

SQL Exception: Data truncated for column 'level' at row 1

この問題は、tinyintdatetimeフィールドに格納される、またはその逆の結果となる列の不整列であることが判明しました。

5
Gray

ENUM( 'x'、 'y'、 'z')として定義されたテーブル列のために同じ問題があり、後でこの列に値 'a'を保存しようとしていたので、エラー。

テーブルの列定義を変更して解決し、値 'a'を列挙セットに追加しました。

4
MTurPash

私の場合、それは曜日を整数(0〜6)として受け入れるENUMを持つテーブルでした。値0を整数として挿入すると、「列のデータが切り捨てられました...」というエラーメッセージが表示されたため、修正するには整数を文字列にキャストする必要がありました。代わりに:

$item->day = 0;

私がしなければなりませんでした;

$item->day = (string) 0;

そのようにゼロをキャストするのはばかげているように見えますが、私の場合はLaravelファクトリーにあり、次のように記述しなければなりませんでした。

$factory->define(App\Schedule::class, function (Faker $faker) {
    return [
        'day' => (string) $faker->numberBetween(0, 6),
        //
    ];
});
1
iSWORD