Manual referensi MySQL tidak memberikan contoh yang jelas tentang cara melakukan ini.
Saya memiliki kolom ENUM nama negara yang harus saya tambahkan lebih banyak negara. Apa sintaks MySQL yang benar untuk mencapai ini?
Inilah usaha saya:
ALTER TABLE carmake CHANGE country country ENUM('Sweden','Malaysia');
Kesalahan yang saya dapatkan adalah: ERROR 1265 (01000): Data truncated for column 'country' at row 1.
The country
kolom kolom ENUM-jenis di atas-pernyataan.
MENUNJUKKAN OUTPUT TABEL :
mysql> SHOW CREATE TABLE carmake;
+---------+---------------------------------------------------------------------+
| Table | Create Table
+---------+---------------------------------------------------------------------+
| carmake | CREATE TABLE `carmake` (
`carmake_id` tinyint(4) NOT NULL AUTO_INCREMENT,
`name` tinytext,
`country` enum('Japan','USA','England','Australia','Germany','France','Italy','Spain','Czech Republic','China','South Korea','India') DEFAULT NULL,
PRIMARY KEY (`carmake_id`),
KEY `name` (`name`(3))
) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=latin1 |
+---------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
PILIH negara berbeda DARI OUTPUT carmake :
+----------------+
| country |
+----------------+
| Italy |
| Germany |
| England |
| USA |
| France |
| South Korea |
| NULL |
| Australia |
| Spain |
| Czech Republic |
+----------------+
mysql
enums
alter-table
Zaid
sumber
sumber
inplace
sejak 10.3.7: mariadb.com/kb/en/library/…Kode Anda berfungsi untuk saya. Ini adalah test case saya:
Kesalahan apa yang Anda lihat?
FWIW ini juga akan berfungsi:
Saya benar-benar akan merekomendasikan tabel negara daripada kolom enum. Anda mungkin memiliki ratusan negara yang akan menghasilkan enum yang agak besar dan canggung.
EDIT: Sekarang saya bisa melihat pesan kesalahan Anda:
Saya menduga Anda memiliki beberapa nilai di kolom negara Anda yang tidak muncul di
ENUM
. Apa output dari perintah berikut?EDIT LAIN: Apa output dari perintah berikut?
Apakah itu
STRICT_TRANS_TABLES
atauSTRICT_ALL_TABLES
? Itu bisa menyebabkan kesalahan, daripada peringatan yang biasa diberikan MySQL pada Anda dalam situasi ini.TETAPI EDIT LAIN: Ok, sekarang saya melihat bahwa Anda pasti memiliki nilai di tabel yang tidak ada di yang baru
ENUM
.ENUM
Definisi baru hanya memungkinkan'Sweden'
dan'Malaysia'
. Meja telah'USA'
,'India'
dan beberapa lainnya.EDIT TERAKHIR (MAYBE): Saya pikir Anda mencoba melakukan ini:
sumber
carmake
meja saya . Mungkinkah itu ada hubungannya dengan itu?The diskusi saya dengan Asaf mungkin tidak jelas untuk mengikuti saat kami pergi bolak-balik sedikit.
Saya berpikir bahwa saya dapat mengklarifikasi hasil dari wacana kami untuk orang lain yang mungkin menghadapi situasi serupa di masa depan untuk mendapat manfaat dari:
ENUM
-tipe kolom adalah binatang yang sangat sulit untuk dimanipulasi. Saya ingin menambahkan dua negara (Malaysia & Swedia) ke set negara yang ada di ENUM saya.Tampaknya MySQL 5.1 (yang sedang saya jalankan) hanya dapat memperbarui ENUM dengan mendefinisikan ulang set yang ada di samping apa yang saya inginkan:
Ini tidak berhasil:
Alasannya adalah bahwa pernyataan MySQL mengganti ENUM yang ada dengan yang lain yang berisi entri
'Malaysia'
dan'Sweden'
hanya. MySQL memunculkan kesalahan karenacarmake
tabel sudah memiliki nilai suka'England'
dan'USA'
yang bukan bagian dariENUM
definisi baru.Yang mengejutkan, yang berikut ini juga tidak berfungsi:
Ternyata bahkan urutan elemen yang ada
ENUM
perlu dipertahankan sambil menambahkan anggota baru ke dalamnya. Jadi jika yang saya milikiENUM
terlihat sepertiENUM('England','USA')
, maka yang baruENUM
harus didefinisikan sebagaiENUM('England','USA','Sweden','Malaysia')
tidakENUM('USA','England','Sweden','Malaysia')
. Masalah ini hanya menjadi manifes ketika ada catatan di tabel yang ada yang menggunakan'USA'
atau'England'
nilai.BOTTOM LINE:
Hanya gunakan
ENUM
ketika Anda tidak mengharapkan set anggota Anda berubah setelah ditentukan. Jika tidak, tabel pencarian jauh lebih mudah untuk diperbarui dan dimodifikasi.sumber
Dalam versi server MYSQL: 5.0.27 saya mencoba ini dan itu berfungsi dengan baik bagi saya memeriksa versi Anda
sumber
FYI: Alat simulasi yang berguna - phpMyAdmin dengan Wampserver 3.0.6 - Pratinjau SQL: Saya menggunakan 'Pratinjau SQL' untuk melihat kode SQL yang akan dihasilkan sebelum Anda menyimpan kolom dengan perubahan ke ENUM. Pratinjau SQL
Di atas Anda melihat bahwa saya telah memasukkan 'Ford', 'Toyota' ke dalam ENUM tetapi saya mendapatkan sintaks ENUM (0) yang menghasilkan kesalahan sintaks Query error 1064 #
Saya kemudian salin dan tempel dan ubah SQL dan jalankan melalui SQL dengan hasil positif.
SQL berubah
Ini adalah perbaikan cepat yang sering saya gunakan dan juga dapat digunakan pada nilai ENUM yang ada yang perlu diubah. Kupikir ini mungkin berguna.
sumber
Ini cara lain ...
Ini menambahkan "orang lain" ke definisi enum dari kolom "rtipo" dari tabel "firmas".
sumber
Itu mungkin jika Anda percaya. Hehe. coba kode ini.
Sebelum menambahkan nilai baru
Setelah menambahkan nilai baru
sumber