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
あなたの問題は、現時点でincoming_Cid
カラムがCHAR(1)
である必要があるときにCHAR(34)
として定義されていることです。
これを修正するには、このコマンドを発行して列の長さを1から34に変更します。
ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);
ここにSQLFiddleデモ
このステートメントを発行することにより:
ALTER TABLES call MODIFY incoming_Cid CHAR;
...長さパラメータを省略しました。したがって、クエリは次と同等でした:
ALTER TABLE calls MODIFY incoming_Cid CHAR(1);
1より大きいサイズのフィールドサイズを指定する必要があります。
ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
ただし、列のデータ型が適切に変更されたために、意味のないエラーが発生しますか?
| 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
この問題は、tinyint
がdatetime
フィールドに格納される、またはその逆の結果となる列の不整列であることが判明しました。
ENUM( 'x'、 'y'、 'z')として定義されたテーブル列のために同じ問題があり、後でこの列に値 'a'を保存しようとしていたので、エラー。
テーブルの列定義を変更して解決し、値 'a'を列挙セットに追加しました。
私の場合、それは曜日を整数(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),
//
];
});