2010-09-03 63 views
0

我有一个与MySQL重复错误消息的问题。在我的一台机器的错误是这样的:重复的输入错误消息格式

重复条目“foobar的”为:它看起来像在其他机器上

重复条目“foobar的”关键2

名称

  • 一台机器打印关键字索引,另一台打印机名称。
  • 一台机器是Ubuntu 10.04桌面;其他Debian的莱尼服务器
  • 的MySQL版本:

Ubuntu的: 服务器版本:5.1.41-3ubuntu12.6 协议版本:10

Debian的: 服务器版本:5.0.51a- 24 + lenny1-log 协议版本:10

这应该是一个真正的版本问题吗? 任何建议如何我可以控制这个?

+0

它们是否是MySQL的相同版本? – 2010-09-03 23:44:37

回答

2

我猜你试图读取代码中的错误消息,并采取适当的措施,并且不同的消息在尝试确定要采取的操作时会导致头痛。如果是这样,我建议你使用mysql错误代码而不是错误消息。消息文本可能会随着不同的软件版本和语言翻译而改变,但代码应始终保持不变。在PHP中可以检查与代码:

mysql_errno($dbh); 

我认为,对应于该消息的错误代码是1062

+0

是的,它可能通过这种方式检测到它是一个重复的关键问题。但是你不能得到关于什么是关键的信息。 (也许有一个我不知道?)在我的应用程序中,我必须显示如下错误消息:“您已经选择了*名称*两次”或“* ip *已被选中,请使用另一个! ...... – thorsten 2010-09-04 01:10:25

+0

我明白了。所以这个表有一个多列主键,你需要找出哪个列导致错误? – spuriousdata 2010-09-04 01:46:33

+0

不完全。有多重唯一键(多列和单列),我想弄清楚键或其索引的名称(* unique_name *或* key 2 *)。但是我会确定所有机器的行为都是一样的。 – thorsten 2010-09-04 13:39:19

1

通过MySQL服务器源代码挖我可以说这是一个版本的问题之后。

版本5.0.41:所述error_dump方法看起来类似于:

dump_error(..,..,key.nr 1);

版本51年5月1日:所述error_dump方法看起来类似于:

dump_error(..,..,key.name);

因此,没有可靠的方法来检测什么密钥是与mysql的doublette?

1

下面是一个正则表达式,我用它来检测MySQL 5.0和5中的代码中的特定索引。1:

/Duplicate entry '.*?' for key ('index_films_on_imdb_id'|2)/ 

这与在那里索引号肯定脆,但在我的情况下,DB模式是相当可靠的产生,我不想下去解析CREATE TABLE语句这将途径有它自己的困难。

如果可能的话,最好的办法是将所有东西都升级到5.1。