[jpa:98] Re: MySQLの一意制約違反を表すエラーコード

Takeshi Namao [E-MAIL ADDRESS DELETED]
2008年 4月 3日 (木) 03:09:09 JST


中村さん

生尾です。
JPA MLでは初めまして。

亀レスですが。

>  MySQLが返すエラーコードですが、
>  「Error: 1022 SQLSTATE: 23000  (ER_DUP_KEY)」と
>  「Error: 1062 SQLSTATE: 23000  (ER_DUP_ENTRY)」の
>  違いをご存知の方がいたら教えていただきたいです。

以前に自分もハマった気がしないでもないですが

http://bugs.mysql.com/bug.php?id=5312

このスレッドを参照すると分かるかと思います。

1062は、InnoDB/MyISAMが出力する重複エラーコード
1022は、NDBClusterが出力する重複エラーコードのようです。

コードは違うが意味は同じだから同じように
扱えとのことです。

以上、よろしくお願いします。

2008/4/1 Toshihiro Nakamura <[E-MAIL ADDRESS DELETED]>:
> 中村(taedium)です。
>
>  MySQLが返すエラーコードですが、
>  「Error: 1022 SQLSTATE: 23000  (ER_DUP_KEY)」と
>  「Error: 1062 SQLSTATE: 23000  (ER_DUP_ENTRY)」の
>  違いをご存知の方がいたら教えていただきたいです。
>
>  これを知りたい背景は、
>  JPAで本当に一意制約違反が発生したかどうかを
>  エラーコードで判別したいからです。
>
>  JPAでは一意制約違反の発生を示す例外として
>  EntityExistsExceptionが用意されていますが、
>  HibernateやToplink Essentialsでは、
>  一意制約違反かどうかに関係なく何らかの制約違反で
>  あれば(NotNull制約違反など)この例外をスローしてしまっています。
>
>  本当に一意制約違反が発生したかどうかを知るには
>  RDBMSごとに原因となったSQLExceptionのgetSQLSate()メソッドや
>  getErrorCode()メソッドが返す値から判別するしかなさそうです。
>
>  MySQL 5.0.45では、一意制約違反が発生すると
>  SQLException#getErrorCode()メソッドは1062を返します。
>  # 重複する主キーや一意キーをINSERTしてみて確かめました。
>
>  ただ、マニュアルを見ると1062によく似ている1022があって
>  違いがわかりませんでした。
>
>  http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html
>
>  場合によっては、一意制約違反で1022が返されるときがあるのでしょうか?
>
>  --
>  Nakamura Toshihiro <[E-MAIL ADDRESS DELETED]>
>
>  _______________________________________________
>  jpa mailing list
>  [E-MAIL ADDRESS DELETED]
>  https://ml.seasar.org/mailman/listinfo/jpa
>



-- 
Takeshi Namao
[E-MAIL ADDRESS DELETED]


jpa メーリングリストの案内