Двойной формат сообщения об ошибке ввода

0

У меня проблема с сообщениями об ошибках mysql duplicate. На одной из моих машин ошибка выглядит так:

Повторяющаяся запись 'foobar' для ключа 2

на другой машине это выглядит так:

Повторяющаяся запись 'foobar' для имени

  • Одна машина печатает индекс ключа, другой - имя ключа.
  • Одна машина - Ubuntu 10.04 Desktop; другой сервер Debian Lenny
  • Версии MySQL:

Ubuntu: Версия сервера: 5.1.41-3ubuntu12.6 Версия протокола: 10

Debian: Версия сервера: 5.0.51a-24 + lenny1-log Версия протокола: 10

Если это действительно проблема с версией? Любые предложения, как я могу это контролировать?

  • 0
    Это те же версии MySQL?
Теги:

3 ответа

2

Я предполагаю, что вы пытаетесь прочитать сообщение об ошибке в своем коде и предпринять соответствующие действия и что разные сообщения вызывают головную боль при попытке решить, какие действия предпринять. Если это так, я предлагаю вам использовать код ошибки mysql, а не сообщение об ошибке. Текст сообщения, вероятно, изменится с различными версиями программного обеспечения и языковыми переводами, но код всегда должен оставаться неизменным. В php вы можете проверить код с помощью:

mysql_errno($dbh);

Я считаю, что код ошибки, соответствующий этому сообщению, равен 1062.

  • 0
    Да, таким образом можно обнаружить, что это проблема дублированного ключа. Но вы не можете получить информацию о том, что означает ключ. (Может быть, есть одна, которую я не знаю?) В моем приложении мне нужно отобразить сообщение об ошибке, например: «Вы дважды выбрали имя » или « IP- адрес уже выбран. Используйте еще одну!» ......
  • 0
    Понимаю. Итак, эта таблица имеет первичный ключ из нескольких столбцов, и вам нужно выяснить, какой столбец вызвал ошибку?
Показать ещё 3 комментария
1

Здесь регулярное выражение, которое я использую для определения определенного индекса в моем коде как для MySQL 5.0, так и для 5.1:

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

Это определенно хрупкое значение с номером индекса, но в моем случае схема БД довольно надежно создана, и я не хотел идти по пути анализа синтаксического анализа CREATE TABLE, который имел бы ему трудности.

Лучше всего было бы просто обновить до 5.1, если это возможно.

1

после копания исходного кода сервера mysql я могу сказать, что это проблема с версией.

версия 5.0.41: метод error_dump выглядит так:

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

версия 5.1.51: метод error_dump выглядит так:

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

Итак, нет надежного способа определить, какой ключ является дублеткой с mysql?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню