Ошибка при INSERT IGNORE кубиком

seodamage

Client
Регистрация
08.09.2014
Сообщения
225
Благодарностей
67
Баллы
28
Привет, столкнулся с неприятной проблемой. хочу при добавлении информации в бд, не добавлять повторно дубли.

Поднял в докер контейнере MariaDB, версия Latest.

Создаю таблицу для примера
SQL:
CREATE TABLE `testing-uniq` (

    `id` INT(11) NULL DEFAULT NULL,
    `my_1` INT(11) NULL DEFAULT NULL,
    `my_2` INT(11) NULL DEFAULT NULL,
    `my_3` INT(11) NULL DEFAULT NULL,
    UNIQUE INDEX `my_3` (`my_3`) USING BTREE

)

COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;

добавляю данные
SQL:
INSERT IGNORE INTO `testing-uniq` (my_1, my_2, my_3)
VALUES ('123', '123', '1234');
всё ок - данные добавляются.


тут же добавляю эти данные повторно и ничего не добавляются из за того что поле my_3 не уникально. всё правильно, мне так и надо.
Но при этом кубик идёт по ошибке. То есть он добавляет инфу если она уникальная. А если нет и инфа дубль - ошибка.

del.jpg

Не пойму как мне чекнуть что это ошибка связана именно с тем что не вставилось из за дубля? В переменную с ответом ничего не попадает почему то.





так же я пробовал немного по другому, создал бд
SQL:
id INT PRIMARY KEY AUTO_INCREMENT
email VC(50) NOT NULL UNIQUE
добавляю туда
SQL:
INSERT INTO subscribers(email)
VALUES('[email protected]');


всё ок. дальше пуляю туда вот так
SQL:
INSERT IGNORE INTO subscribers(email)
VALUES('[email protected]'),
      ('[email protected]');
тут кубик идёт на ошибку, хотя почта [email protected] всё равно добавляется в таблицу. И так же в переменную ответа ничего не пишется. То есть не понятно то ли это ошибка из за того что дубль инфы, толи потому что сервак рухнул и туда вхолостую запросы идут.

del.jpg

del.png


ещё в логах вылазит такой эррор но на работу он так же не влияет
del2.jpg
 
Последнее редактирование:

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
версия мария дб какая? в майскуэль при инсерт игноре нет таких проблем. попробуй апдэйт
SQL:
ON DUPLICATE KEY UPDATE Url=Url;
 
  • Спасибо
Реакции: seodamage

seodamage

Client
Регистрация
08.09.2014
Сообщения
225
Благодарностей
67
Баллы
28
Последнее редактирование:

seodamage

Client
Регистрация
08.09.2014
Сообщения
225
Благодарностей
67
Баллы
28
попробуй апдэйт
SQL:
ON DUPLICATE KEY UPDATE Url=Url;
попробую. есть только момент что у меня распарсены айдихи пользователей с 26 категорий. каждый пользователь может быть в каждой категории или в хотя бы одной. в разных категориях разные данные и поэтому придётся тогда менять сразу все ячейки( всего 500к+ пользователей уникальных, а если вместе с тем что могут быть в разных категориях, то примерно 700к-1кк. я их переодически перепаршиваю и добавляются новые. вот хотел сделать чтобы по id если встречаются дубликат id пользователя то чтобы не добавлялись в ттаблицу больше. а в самой таблице хочу чтобы был параметр типо spammed 1 значит что этому пользователю уже написал.

сама фича вроде как работает, что не добавляет при дубликате id пользователя запись в бд. но вот эта ошибка дурацкая вылезает и не понятно то ли это ошибка из за дубликата, толи из за того что сервак например упал. на bad end стоит отправка сообщений в телегу и 1 раз уже так вздремнул что всю ночь он мне эрроры в телегу писал)

[почему то ответ в переменную не записывает и не сделать обработку ошибки]
 
Последнее редактирование:

seodamage

Client
Регистрация
08.09.2014
Сообщения
225
Благодарностей
67
Баллы
28
в майскуэль при инсерт игноре нет таких проблем.
Попробовал сейчас ещё раз. поднял в docker-compose > MySQL 8.0.29-debian
dddd.png

такая же трабла как и на MariaDB. в первый раз добавляет, во второй раз ошибка.
del.png

del.jpg

в логе ругается на
Выполнение действия Db Character set 'utf8mb3' is not supported by .Net Framework.

хотя если открыть свойства таблицы то там стоит utf8mb4_unicode_ci (в MariaDB такая же кодировка и нету никаких utf8mb3)
wer.png



net_framework с офф сайта скачал поставил (хотя не уверен что это оно)
2022-07-02_120526.png

всё равно эта хрень
 
Последнее редактирование:

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63

seodamage

Client
Регистрация
08.09.2014
Сообщения
225
Благодарностей
67
Баллы
28

Вложения

Последнее редактирование:

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63

Вложения

  • Спасибо
Реакции: seodamage

seodamage

Client
Регистрация
08.09.2014
Сообщения
225
Благодарностей
67
Баллы
28
Обновил фаил MySqlData.dll

и поменял вот так в обоих фаилах
wer.png


теперь при выполнении экшенов которые раньше работали, дропнуть и создать базу пишет эрроры
del.png
 

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
что то сделал не так. Эта ошибка у меня была если просто длл новый закидывал без конфигов.
 
  • Спасибо
Реакции: seodamage

seodamage

Client
Регистрация
08.09.2014
Сообщения
225
Благодарностей
67
Баллы
28
что то сделал не так. Эта ошибка у меня была если просто длл новый закидывал без конфигов.
затупил дико, я зачем то от net framework 6 влепил дллку, сейчас поставил для 4.8 и ошибки ушли.

Теперь не выводит ошибку если делаю INSERT IGNORE 2 раза подряд
dddd.png


большое тебе спасибо!
 
  • Спасибо
Реакции: Wide

seodamage

Client
Регистрация
08.09.2014
Сообщения
225
Благодарностей
67
Баллы
28
в зенно дройде такая же хрень, фиксится также
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)