Cara menggunakan enum mysql

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.

Kolom country adalah kolom tipe ENUM dalam pernyataan di atas.

TAMPILKAN MENCIPTAKAN MEJA KELUARAN:

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 yang berbeda DARI carmake KELUARAN:

+----------------+
| country        |
+----------------+
| Italy          |
| Germany        |
| England        |
| USA            |
| France         |
| South Korea    |
| NULL           |
| Australia      |
| Spain          |
| Czech Republic |
+----------------+

ALTER TABLE
    `table_name`
MODIFY COLUMN
    `column_name2` enum[
        'existing_value1',
        'existing_value2',
        'new_value1',
        'new_value2'
    ]
NOT NULL AFTER `column_name1`;

Kode Anda berfungsi untuk saya. Ini adalah test case saya:

mysql> CREATE TABLE carmake [country ENUM['Canada', 'United States']];
Query OK, 0 rows affected [0.00 sec]

mysql> SHOW CREATE TABLE carmake;
+---------+-------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                            |
+---------+-------------------------------------------------------------------------------------------------------------------------+
| carmake | CREATE TABLE `carmake` [
  `country` enum['Canada','United States'] default NULL
] ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+---------+-------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]

mysql> ALTER TABLE carmake CHANGE country country ENUM['Sweden','Malaysia'];
Query OK, 0 rows affected [0.53 sec]
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE carmake;
+---------+--------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                       |
+---------+--------------------------------------------------------------------------------------------------------------------+
| carmake | CREATE TABLE `carmake` [
  `country` enum['Sweden','Malaysia'] default NULL
] ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+---------+--------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]

Kesalahan apa yang Anda lihat?

FWIW ini juga akan berfungsi:

ALTER TABLE carmake MODIFY COLUMN country ENUM['Sweden','Malaysia'];

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:

ERROR 1265 [01000]: Data truncated for column 'country' at row 1.

Saya menduga Anda memiliki beberapa nilai di kolom negara Anda yang tidak muncul di ENUM

EDIT LAIN: Apa output dari perintah berikut?

SHOW VARIABLES LIKE 'sql_mode';

Apakah itu STRICT_TRANS_TABLES

Diskusi yang saya lakukan dengan Asaf mungkin tidak jelas untuk diikuti karena kami 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- jenis 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:

ALTER TABLE carmake CHANGE country country ENUM['Sweden','Malaysia'] DEFAULT NULL;

Alasannya adalah bahwa pernyataan MySQL mengganti ENUM yang ada dengan yang lain yang hanya berisi entri 'Malaysia' dan 'Sweden'. MySQL memunculkan kesalahan karena tabel carmake sudah memiliki nilai seperti 'England' dan 'USA' yang bukan bagian dari definisi ENUM baru.

Yang mengejutkan, yang berikut ini juga tidak berfungsi:

ALTER TABLE carmake CHANGE country country ENUM['Australia','England','USA'...'Sweden','Malaysia'] DEFAULT NULL;

Ternyata bahkan urutan elemen ENUM yang ada perlu dipertahankan sambil menambahkan anggota baru ke dalamnya. Jadi jika ENUM saya yang ada terlihat seperti ENUM['England','USA'], maka ENUM baru saya harus didefinisikan sebagai ENUM['England','USA','Sweden','Malaysia'] dan bukan ENUM['USA','England','Sweden','Malaysia']. Masalah ini hanya menjadi nyata ketika ada catatan di tabel yang ada yang menggunakan nilai 'USA' atau 'England'.

BOTTOM LINE:

Hanya gunakan ENUMs ketika Anda tidak berharap set anggota Anda berubah setelah ditetapkan. Jika tidak, tabel pencarian jauh lebih mudah untuk diperbarui dan dimodifikasi.

Dalam versi server MYSQL: 5.0.27 saya mencoba ini dan itu berfungsi dengan baik bagi saya memeriksa versi Anda

ALTER TABLE carmake
     MODIFY `country` ENUM['Japan', 'USA', 'England', 'Australia', 'Germany', 'France', 'Italy', 'Spain', 'Czech Republic', 'China', 'South Korea', 'India', 'Sweden', 'Malaysia'];

Ini cara lain ...

Ini menambahkan "orang lain" ke definisi enum dari kolom "rtipo" dari tabel "firmas".

set @new_enum = 'others';
set @table_name = 'firmas';
set @column_name = 'rtipo';
select column_type into @tmp from information_schema.columns 
  where table_name = @table_name and [email protected]_name;
set @tmp = insert[@tmp, instr[@tmp,']'], 0, concat[',\'', @new_enum, '\''] ];
set @tmp = concat['alter table ', @table_name, ' modify ', @column_name, ' ', @tmp];
prepare stmt from @tmp;
execute stmt;
deallocate prepare stmt;

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 sintaksis Kesalahan kueri 1064 #

Saya kemudian salin dan tempel dan ubah SQL dan jalankan melalui SQL dengan hasil positif.

SQL diubah

Ini adalah perbaikan cepat yang sering saya gunakan dan juga dapat digunakan pada nilai ENUM yang ada yang perlu diubah. Kupikir ini mungkin berguna.

Apa itu ENUM di MySQL?

Pengertian Tipe data ENUM dalam MySQL Tipe data ENUM merupakan tipe data yang khusus untuk kolom dimana nilai datanya sudah kita tentukan sebelumnya. Pilihan ini dapat berisi 1 sampai dengan 65,535 pilihan string.

Apa itu ENUM dalam database?

Enum atau Enumeration merupakan tipe data yang berisi sekumpulan konstanta. Enum termasuk dalam tipe data bentukan, karena tipe data ini dibuat sendiri oleh kita.

Jenis kelamin pakai tipe data apa?

Salah satu contoh tipe data ENUM yaitu jenis kelamin, dimana telah kita ketahui bahwa jenis kelamin hanya ada 2 yaitu Laki-laki dan peremuan secara umum.

Apa yang dimaksud dengan tipe data Date?

Tipe data date digunakan untuk menentukan tanggal. Tanggal ditentukan dalam format berikut “YYYY-MM-DD” di mana: YYYY menunjukkan tahun.

Bài mới nhất

Chủ Đề