Setelah mengubah tipe data kolom MySql untuk menyimpan id panggilan Twilio (34 string karakter), saya mencoba mengubah data di kolom itu secara manual dengan:
update calls
set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d'
where id='1';
Namun saya mendapatkan kesalahan yang tidak masuk akal karena tipe data kolom telah dimodifikasi dengan benar?
| Level ||| Code | Message
| Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1
ALTER TABLES calls MODIFY incoming_Cid STRING;
adalah apa yang saya lakukan.STRING
bukan tipe MySQL. Apa mesin database Anda?Jawaban:
Masalah Anda adalah bahwa saat ini
incoming_Cid
kolom Anda ditetapkan sebagaimanaCHAR(1)
mestinyaCHAR(34)
.Untuk memperbaikinya, jalankan perintah ini untuk mengubah panjang kolom Anda dari 1 menjadi 34
ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);
Berikut adalah demo SQLFiddle
sumber
Saya memiliki masalah yang sama karena kolom tabel yang didefinisikan sebagai ENUM ('x', 'y', 'z') dan kemudian saya mencoba untuk menyimpan nilai 'a' ke dalam kolom ini, jadi saya mendapatkan yang disebutkan kesalahan.
Dipecahkan dengan mengubah definisi kolom tabel dan nilai tambah 'a' ke dalam kumpulan enum.
sumber
Dengan mengeluarkan pernyataan ini:
ALTER TABLES call MODIFY incoming_Cid CHAR;
... Anda menghilangkan parameter panjang. Oleh karena itu, kueri Anda setara dengan:
ALTER TABLE calls MODIFY incoming_Cid CHAR(1);
Anda harus menentukan ukuran bidang untuk ukuran lebih dari 1:
ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
sumber
Anda sering bisa mendapatkan pesan ini ketika Anda melakukan sesuatu seperti berikut:
REPLACE INTO table2 (SELECT * FROM table1);
Menghasilkan kasus kami dalam kesalahan berikut:
Masalahnya ternyata kolom misalignment yang mengakibatkan harus
tinyint
dicoba disimpan dalam suatudatetime
field atau sebaliknya.sumber
Dalam kasus saya, itu adalah tabel dengan ENUM yang menerima hari dalam seminggu sebagai bilangan bulat (0 hingga 6). Saat memasukkan nilai 0 sebagai integer saya mendapat pesan error "Data dipotong untuk kolom ..." jadi untuk memperbaikinya saya harus memasukkan integer ke string. Jadi, alih-alih:
$item->day = 0;
Saya harus melakukan;
$item->day = (string) 0;
Kelihatannya konyol untuk membuang nol seperti itu, tetapi dalam kasus saya itu di pabrik Laravel, dan saya harus menulisnya seperti ini:
$factory->define(App\Schedule::class, function (Faker $faker) { return [ 'day' => (string) $faker->numberBetween(0, 6), // ]; });
sumber
ketika saya pertama kali mencoba mengimpor csv ke mysql, saya mendapat kesalahan yang sama, dan kemudian saya menemukan tabel mysql yang saya buat tidak memiliki panjang karakter bidang csv yang mengimpor, jadi jika ini pertama kali mengimpor csv
varchar
atautext
, jangan gabungkanint
atau nilai lainnya.maka Anda siap untuk pergi.
sumber
Saya memiliki masalah yang sama, dengan bidang database dengan tipe "SET" yang merupakan tipe enum.
Saya mencoba menambahkan nilai yang tidak ada dalam daftar itu.
Nilai yang saya coba tambahkan memiliki nilai desimal 256, tetapi daftar enum hanya memiliki 8 nilai.
Jadi saya hanya perlu menambahkan nilai tambahan ke lapangan.
Membaca entri dokumentasi ini membantu saya memahami masalahnya.
SET Member Decimal Value Binary Value 'a' 1 0001 'b' 2 0010 'c' 4 0100 'd' 8 1000
sumber