Page 1 of 1

AV on trigger

Posted: Thu 12 Aug 2021 09:04
by Jane
// дубль из русскоязычного форума, поскольку там давно нет активности...

Добрый день. Для таблицы 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
Дайте знать, если требуется какая-либо доп.информация.

Re: AV on trigger

Posted: Thu 12 Aug 2021 09:57
by ViktorV
Здравствуйте Jane,

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

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

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

Re: AV on trigger

Posted: Sun 28 Aug 2022 17:20
by robert84
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!)

Re: AV on trigger

Posted: Thu 15 Sep 2022 07:32
by pavelpd
Hi, Robert

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

Re: AV on trigger

Posted: Mon 03 Oct 2022 01:37
by brianwilsonrt
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