5

このステートメントを実行すると:

ALTER TABLE person MODIFY COLUMN subcommittee
  ENUM('Arts','Bus','HC','IA','Pol','ST','Floater','Student') NULL DEFAULT NULL;

応答は

2801 row(s) affected Records: 2801  Duplicates: 0  Warnings: 0

しかし、この声明:

update person set subcommittee = 'Student' where person_pk = 1381;

常に次のエラー メッセージが表示されます。

Error Code: 1265. Data truncated for column 'subcommittee' at row 1

(1381 という人物はデータベースに登録されています。念のために言っておきます。そうしないと、このエラー メッセージが表示されませんでした。)

別の列挙型を選択すると動作します:

update person set subcommittee = 'Floater' where person_pk = 1381;

1 row(s) affected Rows matched: 1  Changed: 1  Warnings: 0

PDO を使用して PHP アプリからエラーを取得したときに最初にこれに気付きましたが、上記を取得した MySQLWorkbench で再現しました。

おそらく、列を完全に削除して再定義すると問題を回避できますが、これはライブデータベースであり、列挙型の値 (Student) を 1 つだけ追加したいだけです。

私は、alter ステートメントを再入力し、それをテキスト エディターにコピーして文字を調べたり、その他のいくつかのことを試して、値内の奇妙な非表示文字を除外しようとしました。また、値を再配置しました。

ALTER TABLE person MODIFY COLUMN subcommittee
  ENUM('Arts','Bus','HC','IA','Pol','ST', 'Student','Floater') NULL DEFAULT NULL;

喜びはありません。

少しググったところ、enum 列の変更に関連するバグがいくつか見られました。これがMySQLのバグかどうかは誰にもわかりませんか?

(MySQL バージョン 5.5.28。)


数人が求めたいくつかのデータ:

mysql> describe person;
+------------------------------+-------------------------------------------------------------+------+-----+---------+----------------+
| Field                        | Type                                                        | Null | Key | Default | Extra          |
+------------------------------+-------------------------------------------------------------+------+-----+---------+----------------+
| person_pk                    | int(11)                                                     | NO   | PRI | NULL    | auto_increment |
| name_last                    | varchar(255)                                                | NO   | MUL |         |                |
| name_first                   | varchar(255)                                                | YES  |     | NULL    |                |
| name_index                   | int(11)                                                     | NO   |     | 0       |                |
| name_middle                  | varchar(255)                                                | YES  |     | NULL    |                |
| name_spouse_or_partner_first | varchar(255)                                                | YES  |     | NULL    |                |
| name_spouse_or_partner_last  | varchar(255)                                                | YES  |     | NULL    |                |
| name_legal_first             | varchar(255)                                                | YES  |     | NULL    |                |
| name_legal_middle            | varchar(255)                                                | YES  |     | NULL    |                |
| name_legal_last              | varchar(255)                                                | YES  |     | NULL    |                |
| prefix                       | varchar(255)                                                | YES  |     | NULL    |                |
| suffix                       | varchar(255)                                                | YES  |     | NULL    |                |
| salutation                   | varchar(255)                                                | YES  |     | NULL    |                |
| home_street1                 | varchar(255)                                                | YES  |     | NULL    |                |
| home_street2                 | varchar(255)                                                | YES  |     | NULL    |                |
| home_city                    | varchar(255)                                                | YES  |     | NULL    |                |
| home_state                   | varchar(255)                                                | YES  |     | NULL    |                |
| home_zip                     | varchar(255)                                                | YES  |     | NULL    |                |
| home_country                 | varchar(255)                                                | YES  |     | NULL    |                |
| work_org                     | varchar(255)                                                | YES  |     | NULL    |                |
| work_street1                 | varchar(255)                                                | YES  |     | NULL    |                |
| work_street2                 | varchar(255)                                                | YES  |     | NULL    |                |
| work_city                    | varchar(255)                                                | YES  |     | NULL    |                |
| work_state                   | varchar(255)                                                | YES  |     | NULL    |                |
| work_zip                     | varchar(255)                                                | YES  |     | NULL    |                |
| work_country                 | varchar(255)                                                | YES  |     | NULL    |                |
| phone_home                   | varchar(255)                                                | YES  |     | NULL    |                |
| phone_work                   | varchar(255)                                                | YES  |     | NULL    |                |
| phone_mobile                 | varchar(255)                                                | YES  |     | NULL    |                |
| phone_fax                    | varchar(255)                                                | YES  |     | NULL    |                |
| phone5                       | varchar(255)                                                | YES  |     | NULL    |                |
| phone6                       | varchar(255)                                                | YES  |     | NULL    |                |
| email                        | varchar(255)                                                | YES  |     | NULL    |                |
| email2                       | varchar(255)                                                | YES  |     | NULL    |                |
| website                      | varchar(255)                                                | YES  |     | NULL    |                |
| preferred_communication      | enum('home','work','mobile','email','mail','special')       | YES  |     | NULL    |                |
| preferred_communication_text | varchar(255)                                                | YES  |     | NULL    |                |
| preferred_address            | enum('home','work')                                         | YES  |     | NULL    |                |
| use_housing                  | tinyint(1)                                                  | YES  |     | NULL    |                |
| smoker                       | tinyint(1)                                                  | YES  |     | NULL    |                |
| pet_allergies                | tinyint(1)                                                  | YES  |     | NULL    |                |
| pets                         | tinyint(1)                                                  | YES  |     | NULL    |                |
| kids                         | tinyint(1)                                                  | YES  |     | NULL    |                |
| physical_considerations      | text                                                        | YES  |     | NULL    |                |
| dietary_needs                | text                                                        | YES  |     | NULL    |                |
| appellation                  | varchar(255)                                                | YES  |     | NULL    |                |
| bio                          | text                                                        | YES  |     | NULL    |                |
| photo                        | varchar(255)                                                | YES  |     | NULL    |                |
| include_in_directory         | tinyint(1)                                                  | YES  |     | NULL    |                |
| participant_notes            | text                                                        | YES  |     | NULL    |                |
| contact_notes                | text                                                        | YES  |     | NULL    |                |
| available_1A                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| available_1P                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| available_2A                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| available_2P                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| available_3A                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| available_3P                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| available_4A                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| available_4P                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| available_5A                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| available_5P                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| interest_x_dis               | tinyint(1)                                                  | YES  |     | NULL    |                |
| interest_arts                | tinyint(1)                                                  | YES  |     | NULL    |                |
| interest_bus                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| interest_hc                  | tinyint(1)                                                  | YES  |     | NULL    |                |
| interest_ia                  | tinyint(1)                                                  | YES  |     | NULL    |                |
| interest_med                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| interest_pol                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| interest_st                  | tinyint(1)                                                  | YES  |     | NULL    |                |
| venue_manager                | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_arts               | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_bus                | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_hc                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_ia                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_pol                | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_st                 | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_students           | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_housing            | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_moderator          | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_volunteer          | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_fundraising        | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_office             | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_other              | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_notes              | text                                                        | YES  |     | NULL    |                |
| houser_fk                    | int(11)                                                     | YES  | MUL | NULL    |                |
| housed_fk                    | int(11)                                                     | YES  | MUL | NULL    |                |
| contact_fk                   | int(11)                                                     | YES  | MUL | NULL    |                |
| hyphen_fk                    | int(11)                                                     | YES  | MUL | NULL    |                |
| introduced_by_fk             | int(11)                                                     | YES  | MUL | NULL    |                |
| committee_contact_fk         | int(11)                                                     | YES  | MUL | NULL    |                |
| donor                        | tinyint(1)                                                  | YES  |     | NULL    |                |
| houser                       | tinyint(1)                                                  | YES  |     | NULL    |                |
| moderator                    | tinyint(1)                                                  | YES  |     | NULL    |                |
| producer                     | tinyint(1)                                                  | YES  |     | NULL    |                |
| committee_member             | tinyint(1)                                                  | YES  |     | NULL    |                |
| participant                  | tinyint(1)                                                  | YES  |     | NULL    |                |
| fan                          | tinyint(1)                                                  | YES  |     | NULL    |                |
| student                      | tinyint(1)                                                  | YES  |     | NULL    |                |
| volunteer                    | tinyint(1)                                                  | YES  |     | NULL    |                |
| staff                        | tinyint(1)                                                  | YES  |     | NULL    |                |
| companion                    | tinyint(1)                                                  | YES  |     | NULL    |                |
| id_number                    | int(11)                                                     | YES  |     | NULL    |                |
| deceased                     | tinyint(1)                                                  | YES  |     | NULL    |                |
| load_donation                | tinyint(1)                                                  | YES  |     | NULL    |                |
| load_panel                   | tinyint(1)                                                  | YES  |     | NULL    |                |
| load_participant             | tinyint(1)                                                  | YES  |     | NULL    |                |
| conversion_note              | text                                                        | YES  |     | NULL    |                |
| replacedby_fk                | int(11)                                                     | YES  | MUL | NULL    |                |
| companion_to_fk              | int(11)                                                     | YES  | MUL | NULL    |                |
| name_for_program             | varchar(255)                                                | YES  |     | NULL    |                |
| gender                       | enum('male','female')                                       | YES  |     | NULL    |                |
| subcommittee                 | enum('Arts','Bus','HC','IA','Pol','ST','Student','Floater') | YES  |     | NULL    |                |
| companion_type               | enum('spouse/partner','child','friend')                     | YES  |     | NULL    |                |
| days_here                    | varchar(6)                                                  | YES  |     | NULL    |                |
| new_or_returning             | enum('new','returning')                                     | YES  |     | NULL    |                |
| confirmation_sheet           | tinyint(1)                                                  | YES  |     | NULL    |                |
| bio_in                       | tinyint(1)                                                  | YES  |     | NULL    |                |
| photo_in                     | tinyint(1)                                                  | YES  |     | NULL    |                |
| birthday                     | date                                                        | YES  |     | NULL    |                |
| date_topics_letter_sent      | date                                                        | YES  |     | NULL    |                |
| topics_received              | tinyint(1)                                                  | YES  |     | NULL    |                |
| rating                       | enum('A','B','C','D','F')                                   | YES  |     | NULL    |                |
| flight_info_received         | tinyint(1)                                                  | YES  |     | NULL    |                |
| transportation_email_sent    | tinyint(1)                                                  | YES  |     | NULL    |                |
| bringing_children            | tinyint(1)                                                  | YES  |     | NULL    |                |
| date_address_verfied         | date                                                        | YES  |     | NULL    |                |
+------------------------------+-------------------------------------------------------------+------+-----+---------+----------------+
126 rows in set (0.01 sec)

mysql> select person_pk, subcommittee from person where person_pk = 1381;
+-----------+--------------+
| person_pk | subcommittee |
+-----------+--------------+
|      1381 | Floater      |
+-----------+--------------+
1 row in set (0.00 sec)
4

3 に答える 3

1

これは MySQL の非常にデリケートな問題です

DBA StackExchange で ENUM リストの変更に関する投稿を書きました

データが入力された状態でこれを行うのは危険なビジネスです。空のテーブルでこれを行ってから、テーブルをリロードする必要があります。

于 2013-01-07T18:29:36.530 に答える
1

これはバグだと結論付けます。MySQL は、変更を行ったときにエラーを報告せず、列の詳細を表示するときに新しい値を示しましたが、新しい値がそこにあるとは信じていませんでした。RolandoMySQLDBA は、これが「微妙な話題」であることを確認しました (彼の言葉)。

だから、私がしたことはこれでした:

  1. 「subcommittee2」という名前の新しい列挙列を作成します。

  2. 新しい列の値を古い列の値で更新します (更新者セット subcommittee = subcommittee2)。

  3. 「subcommitte」の名前を「subcommittee_old」に変更します。

  4. 「subcommittee2」の名前を「subcommittee」に変更します。

アプリで実行すると、新しい値が受け入れられることが確認されます。


更新:クライアントが別の列挙型を要求したため、上記の手法を使用しても機能しませんでした。今回は新しい列を作成し、値を転送し、名前を変更しても機能しませんでした。同じエラー メッセージです。

UPDATE2: 新しい列「subcommittee2」を作成し、古い列から入力して、そのままにしておきました。私のアプリでは、新しい列名を使用するように変更しました。うんざりですが、自分の仕事を終わらせなければなりません...

更新 3:別のフィールドの列挙型の値に追加しようとしたところ、機能したので、次の理論が得られました。新しく追加された値は、既存の値よりも長くなってはなりません。たとえば、この場合の最長の値は「承認済み」で、値「保留」と「待機」を追加すると、正常に機能しました。(元のエラーは「Data truncated」だったことを思い出してください。)

于 2013-01-07T18:54:43.823 に答える
0

この回答から判断すると、ENUM の以前の順序は同じである必要があり、最後に新しい可能性があるようです。したがって、元の注文が何であったかを確認してから、そのリストの最後にSHOW CREATE TABLE追加します。Student

于 2013-01-07T18:28:50.967 に答える