AV on trigger

Discussion of open issues, suggestions and bugs regarding MyDAC (Data Access Components for MySQL) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
Jane
Posts: 4
Joined: Wed 13 Dec 2017 13:19

AV on trigger

Post by Jane » Thu 12 Aug 2021 09:04

// дубль из русскоязычного форума, поскольку там давно нет активности...

Добрый день. Для таблицы workers есть триггер после апдейта записи, сохраняющий в другую таблицу log_actions sql текст апдейта (для логгирования действий юзера):

Code: Select all

CREATE TRIGGER `worker_changed_by` AFTER UPDATE ON `workers` FOR EACH ROW BEGIN
  DECLARE original_query varchar(1024);
  SET original_query = (SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID());
  INSERT INTO log_actions (id_user, dt, table_name, id_rec, action, sql_text) VALUES (@uid, NOW(), 'workers', NEW.id, 'U', original_query);
END;
При MyCommand.Execute например такого апдейта:

Code: Select all

UPDATE workers SET fio='test' WHERE id=123
без триггера все проходит ОК, но с триггером получаю ошибку:
Project ххх.exe raised exception class EMySqlException with message '#HY000Incorrect string value: '\xD9\xE5\xF2\xE8\xED\xE8...' for column 'INFO' at row 1'.
Если напрямую апдейтить любое поле в workers в любом из БД-менеджеров или выполнить query с текстом апдейта выше, то триггер исполняется корректно, т.е. в таблицу log_actions заносится запись с sql текстом апдейта.

Если в триггере заменить (SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID()) на 'any_text', то ошибки нет!
Поле `log_actions`.`sql_text` varchar(1024) с CHARSET=utf8mb4.
Поле `PROCESSLIST`.`INFO` longtext с CHARSET=utf8mb3. Если заменить в триггере info на CONVERT(info USING utf8mb4), то ошибка остается.

Получается, проблема в MyDAC - как ее исправить?

Окружение: mydac_10.4.4_src + Delphi 10.4.2 + Win 10 + MySQL 8.0.25
Дайте знать, если требуется какая-либо доп.информация.

ViktorV
Devart Team
Posts: 3168
Joined: Wed 30 Jul 2014 07:16

Re: AV on trigger

Post by ViktorV » Thu 12 Aug 2021 09:57

Здравствуйте Jane,

Мы ответили на Ваш запрос в этой ветке:
ru/viewtopic.php?f=29&t=27032&p=22788#p22788
Пожалуйста предоставьте нам дом информацию, чтобы мы могла провести полную проверку.

Для Вашего удобства можете писать на русском- наша команда ответит без проблем ответит Вам.

С уважением,
Виктор

robert84
Posts: 8
Joined: Sun 28 Aug 2022 16:51

Re: AV on trigger

Post by robert84 » Sun 28 Aug 2022 17:20

Hi

Although I don't fully understand the problem, I notice you have a mix of charsets (utf8mb3 vs utf8mb4) which is an almost guaranteed recipe for trouble. So I would fix that before anything else. It may well be the cause of your problem.

Note that if you're using UseUnicode, MyDAC defaults to 'utf8' (aka 'utf8mb3'). See my other post which is somewhat related. In this situation, unless you consistently use utf8mb3 everywhere else it is likely you run into charset mismatch or collation mismatch issues.

I suggest you do one of the following:
  • Disable UseUnicode
  • Migrate all your charsets to utf8mb3 to match with MyDAC
  • Wait for MyDAC to be upgraded to utf8mb4
  • Force MyDAC to use utf8mb4 by issuing your own SET NAMES command (potentially dangerous!)

pavelpd
Devart Team
Posts: 109
Joined: Thu 06 Jan 2022 14:16

Re: AV on trigger

Post by pavelpd » Thu 15 Sep 2022 07:32

Hi, Robert

We have responded to your request in this topic: viewtopic.php?f=7&t=58439

brianwilsonrt
Posts: 1
Joined: Mon 03 Oct 2022 01:36

Re: AV on trigger

Post by brianwilsonrt » Mon 03 Oct 2022 01:37

This is why I'm asking for advice from MyDAC devs as they're the ones who know if this would be a problem (it likely would) and have the ability to fix it. wordle 2

Post Reply