У меня проблема с сообщениями об ошибках mysql duplicate. На одной из моих машин ошибка выглядит так:
Повторяющаяся запись 'foobar' для ключа 2
на другой машине это выглядит так:
Повторяющаяся запись 'foobar' для имени
Ubuntu: Версия сервера: 5.1.41-3ubuntu12.6 Версия протокола: 10
Debian: Версия сервера: 5.0.51a-24 + lenny1-log Версия протокола: 10
Если это действительно проблема с версией? Любые предложения, как я могу это контролировать?
Я предполагаю, что вы пытаетесь прочитать сообщение об ошибке в своем коде и предпринять соответствующие действия и что разные сообщения вызывают головную боль при попытке решить, какие действия предпринять. Если это так, я предлагаю вам использовать код ошибки mysql, а не сообщение об ошибке. Текст сообщения, вероятно, изменится с различными версиями программного обеспечения и языковыми переводами, но код всегда должен оставаться неизменным. В php вы можете проверить код с помощью:
mysql_errno($dbh);
Я считаю, что код ошибки, соответствующий этому сообщению, равен 1062.
Здесь регулярное выражение, которое я использую для определения определенного индекса в моем коде как для MySQL 5.0, так и для 5.1:
/Duplicate entry '.*?' for key ('index_films_on_imdb_id'|2)/
Это определенно хрупкое значение с номером индекса, но в моем случае схема БД довольно надежно создана, и я не хотел идти по пути анализа синтаксического анализа CREATE TABLE, который имел бы ему трудности.
Лучше всего было бы просто обновить до 5.1, если это возможно.
после копания исходного кода сервера mysql я могу сказать, что это проблема с версией.
версия 5.0.41: метод error_dump выглядит так:
dump_error (..,.., key.nr +1);
версия 5.1.51: метод error_dump выглядит так:
dump_error (..,.., key.name);
Итак, нет надежного способа определить, какой ключ является дублеткой с mysql?