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

mysql:9928

From: Hirofumi Fujiwara <Hirofumi Fujiwara <fuji@xxxxxxxxxx>>
Date: Thu, 29 Jul 2004 14:57:37 +0900 (JST)
Subject: [mysql 09928] 日本語カラム名を使用した時の参照制約について

藤原です

  カラム名に日本語を使用した場合、INNODB では参照制約がうまくいかない
  場合があるようです。

http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html
にある最初のサンプル、および Paul DuBoisのMySQL本 p.248 を参考に以下の
ようなSQL文を作って、テーブル作成を試みました。

------------------------------------------------------------------------
original SQL statements                                  This works well
------------------------------------------------------------------------
create table parent (
  par_id	INT NOT NULL,
  PRIMARY KEY	(par_id)
) TYPE = INNODB;

create table child (
  par_id	INT NOT NULL,
  child_id 	INT NOT NULL,
  PRIMARY KEY   (par_id,child_id),
  FOREIGN KEY (par_id) REFERENCES parent(par_id) ON DELETE CASCADE
) TYPE = INNODB;

------------------------------------------------------------------------
child_id is replaced as 子供                             This works well
------------------------------------------------------------------------ 
create table parent (
  par_id	INT NOT NULL,
  PRIMARY KEY	(par_id)
) TYPE = INNODB;

create table child (
  par_id	INT NOT NULL,
  子供 	INT NOT NULL,
  PRIMARY KEY   (par_id,子供),
  FOREIGN KEY (par_id) REFERENCES parent(par_id) ON DELETE CASCADE
) TYPE = INNODB;

------------------------------------------------------------------------
par_id is replaced as 親                               This doesn't work
------------------------------------------------------------------------ 
create table parent (
  親	INT NOT NULL,
  PRIMARY KEY	(親)
) TYPE = INNODB;

create table child (
  親	INT NOT NULL,
  child_id 	INT NOT NULL,
  PRIMARY KEY   (親,child_id),
  FOREIGN KEY (親) REFERENCES parent(親) ON DELETE CASCADE
) TYPE = INNODB;


mysql> create table parent (
    ->   親    INT NOT NULL,
    ->   PRIMARY KEY   (親)
    -> ) TYPE = INNODB;
Query OK, 0 rows affected, 1 warning (0.07 sec)

mysql> create table child (
    ->   親    INT NOT NULL,
    ->   child_id      INT NOT NULL,
    ->   PRIMARY KEY   (親,child_id),
    ->   FOREIGN KEY (親) REFERENCES parent(親) ON DELETE CASCADE
    -> ) TYPE = INNODB;
ERROR 1005 (HY000): Can't create table './test/child.frm' (errno: 150)

------------------------------------------------------------------------

ujisで実行した場合は、上記のようなエラーになって、作成できませんでした。
後からALTERで制約を加えようとしても、そのときにエラーが発生しました。  

なお、utf8 にて実行した場合は、OKでした。

ということは、SQL文のメタデータであるカラム名を取得するとき、何らかの
変換ミスが発生しているのでしょうか?

このレベルは調べ難いので、MySQL側で調査してもらえると助かります。また、
日本語カラム名を使いたがっている人もいるので、是非対応して欲しいです。

# 今のところは、日本語カラム名を使わないというのが一応安全策ではありま
# すが、あまり望ましいことではないですね。

------------------------------------------------------------------
株式会社 タイムインターメディア       藤原 博文 fuji@xxxxxxxxxx
本社 160-0002 東京都新宿区坂町26-27 IPBビル    TEL 03-5362-9009
URL  http://www.timedia.co.jp/                    FAX 03-5362-9008
地図 http://www.timedia.co.jp/company/map/     新宿線曙橋駅徒歩5分
------------------------------------------------------------------
♪  Puzzle Japan  http://www.puzzle.jp/  毎日新作パズルで遊ぼう ♪
------------------------------------------------------------------

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

->    9928 2004-07-29 14:57 [Hirofumi Fujiwara <f] 日本語カラム名を使用した時の参照制約について
      9929 2004-07-29 16:30 ┣[<akebi.yaji@xxxxxxxx]                                       
      9930 2004-07-29 16:51 ┃┗[Hirofumi Fujiwara <f]                                     
      9932 2004-07-30 06:30 ┃ ┗["Shuichi Tamagawa" <]                                   
      9931 2004-07-30 05:57 ┗["Shuichi Tamagawa" <]                                       
      9934 2004-07-30 14:53  ┗[Hirofumi Fujiwara <f]