[前][次][番号順一覧][スレッド一覧]

mysql:10214

From: 渡邊昌之 <渡邊昌之 <mark@xxxxxxxxxx>>
Date: Fri, 24 Sep 2004 14:57:35 +0900
Subject: [mysql 10214] Re: ENUMの要素の変更について

渡邊と申します。

試してみました。
確かに値が消えていましたね。
で、changeじゃなくてmodifyだとどうだろうと思い
やってみましたが、この方法ではやっぱり消えてしまいます。

alter tableは内部的にどういうことをやっているのかというと
記憶によれば、新しい定義のテーブルをつくって
古いテーブルから新しいテーブルにコピーするという作業をするはずです。
そこで、古いテーブルのenumフィールドから新しいテーブルのenumフィールドに
データをコピーするとき、未定義の名前としてコピーされて、nullに
なってしまうのではないでしょうか。
そこで、以下の2段階の手順を踏めば、一応いけそうです。

alter table [table_name] modify [column] int;
alter table [table_name] modify [column] enum('Yes','No') not null;

マニュアルにあるとおり、enumは内部的には整数で持っていて、
整数の文脈で参照すると整数として取り出せて、
整数の文脈で格納すると整数として格納できるというのをつかって
いったん整数になおして、もう一度新しいenumに対して整数として
格納するということで、値が保持されます。
(一応手元では成功しました。Ver.4.0.20)

もちろん、Y=Yesであるということは、Mysqlにはわかりませんので
当然、enum要素の数と順番が一致していることは前提です。

他にも良い方法があるかもしれませんが、とりあえず

wac54348@xxxxxxxxxx wrote:

> 成松です。いつもお世話になります。
> 
> 最初、ENUM型の要素を Y,N とするカラムを追加しました。
> 
> ALTER TABLE [table name]
>   ADD [colum name] ENUM('Y','N') NOT NULL
>   DEFAULT 'Y';
> 
> 後から、それを Yes, No に変更したいと思い、下記を実行しました。
> 
> ALTER TABLE [table name]
>   CHANGE [colum name] [colum name]  ENUM('Yes','No') NOT NULL
>   DEFAULT 'Yes';
> 
> 実行後、警告がでて、カラムの中身が空白表示になってしまいました。
> 結果を正常に表示する場合、ALTER TABLE でどのように指定すれば良かったのでしょ
> うか?
> 
> 
> 


_______________________________________
渡邊昌之
mark@xxxxxxxxxx
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[前][次][番号順一覧][スレッド一覧]

     10213 2004-09-24 14:41 [<wac54348@xxxxxxxxxx] ENUMの要素の変更について                
->   10214 2004-09-24 14:57 ┗[渡邊昌之 <mark@xxxxx]                                       
     10216 2004-09-24 16:22  ┗[<wac54348@xxxxxxxxxx]                                     
     10218 2004-09-24 19:23   ┗[Hirofumi Fujiwara <f]