Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Duplicate entry for key. Mysql пытается создать запись с другими значениями. / 8 сообщений из 8, страница 1 из 1
05.05.2015, 11:49:04
    #38951593
peektoseen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry for key. Mysql пытается создать запись с другими значениями.
Всем привет. Подскажите пожалуйста, как решить эту проблему:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
mysql> INSERT INTO custom_wifi_score( user_id, 
    -> TYPE , iblock_element_id, score ) 
    -> VALUES ( 517049460113,  'OK', 30033, 20 );
ERROR 1062 (23000): Duplicate entry '30033-OK-2147483647' for key 'unique_index'

mysql> show index from custom_wifi_score where key_name='unique_index'\G
*************************** 1. row ***************************
        Table: custom_wifi_score
   Non_unique: 0
     Key_name: unique_index
 Seq_in_index: 1
  Column_name: iblock_element_id
    Collation: A
  Cardinality: 316
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 
*************************** 2. row ***************************
        Table: custom_wifi_score
   Non_unique: 0
     Key_name: unique_index
 Seq_in_index: 2
  Column_name: type
    Collation: A
  Cardinality: 702
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 
*************************** 3. row ***************************
        Table: custom_wifi_score
   Non_unique: 0
     Key_name: unique_index
 Seq_in_index: 3
  Column_name: user_id
    Collation: A
  Cardinality: 6322
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 
3 rows in set (0.01 sec)



Как видите, я пытаюсь записать user_id =' 517049460113 ', но ошибка указывает на то, что уже существует запись, в которой уникальный ключ такой-же, и пишет мне значение user_id совершенно другой записи ' 2147483647 '.
Может что с ключом не так?
...
Рейтинг: 0 / 0
05.05.2015, 11:56:16
    #38951608
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry for key. Mysql пытается создать запись с другими значениями.
peektoseen,
изменить тип поля `user_id` с integer на bigint.
...
Рейтинг: 0 / 0
05.05.2015, 11:58:13
    #38951612
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry for key. Mysql пытается создать запись с другими значениями.
Похоже, что поле user_id имеет тип INT и вставляемое значение усекается до верхней границы этого типа.
И, похоже, уже не первый раз, т.е. часть значений в этом поле уже испорчена.
...
Рейтинг: 0 / 0
05.05.2015, 12:00:28
    #38951622
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry for key. Mysql пытается создать запись с другими значениями.
peektoseen,

Что может быть не так с индексом ?
Он либо есть, либо нет его.

Ты транскрипт буквальный привёл ?
В консоли всё ты ровно так и делал, и видел такие сообщения ?

Если подозреваешь, что индекс испортился (хотя это очень странно) -- дропни индекс и создай заново такой же.
...
Рейтинг: 0 / 0
05.05.2015, 12:04:56
    #38951631
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry for key. Mysql пытается создать запись с другими значениями.
miksoftИ, похоже, уже не первый раз, т.е. часть значений в этом поле уже испорчена.Ну если индекс уникальный, то ничего там не испорчено, кроме одного, самого первого, усечённого значения. Остальные должны были автоматически отбрасываться.
...
Рейтинг: 0 / 0
05.05.2015, 12:07:40
    #38951637
peektoseen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry for key. Mysql пытается создать запись с другими значениями.
скукотища , miksoft , в точку именно поэтому так и получилось. Думал что раз я выставляю для INT разрядность 20 - то позволит записать туда 20-значное число, как оказалось - нет.
Таблица тестовая, в продакшен пока не выпущена. Повезло что заметил баг.
Спасибо вам за ответы!
...
Рейтинг: 0 / 0
05.05.2015, 12:07:54
    #38951639
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry for key. Mysql пытается создать запись с другими значениями.
tanglirmiksoftИ, похоже, уже не первый раз, т.е. часть значений в этом поле уже испорчена.Ну если индекс уникальный, то ничего там не испорчено, кроме одного, самого первого, усечённого значения. Остальные должны были автоматически отбрасываться.Кроме одного на каждую пару значений (iblock_element_id, type). Индекс-то из трех полей.
...
Рейтинг: 0 / 0
05.05.2015, 12:09:46
    #38951642
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Duplicate entry for key. Mysql пытается создать запись с другими значениями.
peektoseenДумал что раз я выставляю для INT разрядность 20 - то позволит записать туда 20-значное число, как оказалось - нет.Нет, конечно. Эта "разрядность" на фактическое хранение вообще никакого влияния не оказывает. Это просто некий комментарий к полю, который говорит о том, как форматировать число при выводе некоторыми утилитами, в частности консольным клиентом mysql.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Duplicate entry for key. Mysql пытается создать запись с другими значениями. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]