2010-09-03 45 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。