Логика состоит в том, чтобы добавить строку в таблицу в другой БД, когда строка вставлена в пользовательскую таблицу Keycloak (я думаю, достаточно просто)
Случилось только то, что ключ имеет значение, но остальные были вставлены в NULL (у них есть значения, все они были правильно вставлены в таблицу KeyCloak до того, как произошел триггер)
У Цезаря была та же проблема, но она не работала с его решением.
Триггер MySQL «После вставки» продолжает вставлять нули
Я использую PHPMyAdmin для Mysql
некоторый код будет добавлен автоматически, например "для каждой строки ..."
Имя: добавить
Таблица: USER_ENTITY
Время: ПОСЛЕ
Событие: ВСТАВИТЬ
Определение:
BEGIN
INSERT INTO AnotherDB.application_user
(`user_id`,`first_name`,`last_name`,`hash`) VALUES (NEW.ID, NEW.FIRST_NAME,
NEW.LAST_NAME, md5(NEW.ID));
END
Я ожидаю, что вставленная строка будет ID, FIRST, LAST, HASH
Но я получаю ID, NULL, NULL, HASH
Так в чем же причина этой проблемы?
Изменить 21 июня:
спасибо за правки и предложения.
Sql создания целевой таблицы вставки
CREATE TABLE `application_user` (.
`user_id` varchar(256) NOT NULL,
`type` varchar(256) DEFAULT NULL,
`first_name` varchar(256) CHARACTER SET utf8 DEFAULT NULL,
`last_name` varchar(256) CHARACTER SET utf8 DEFAULT NULL,
`group_id` varchar(256) DEFAULT NULL,
`wallet_id` varchar(256) NOT NULL,
PRIMARY KEY (`user_id`).
) ENGINE=InnoDB DEFAULT CHARSET=latin1.
Таблица USER_ENTITY Keycloak намного длиннее, но, возможно, именно в этом проблема:
CREATE TABLE `USER_ENTITY` (
`ID` varchar(36) COLLATE utf8_unicode_ci NOT NULL,
`EMAIL` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`EMAIL_CONSTRAINT` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`EMAIL_VERIFIED` bit(1) NOT NULL DEFAULT b'0',
`ENABLED` bit(1) NOT NULL DEFAULT b'0',
`FEDERATION_LINK` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`FIRST_NAME` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`LAST_NAME` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`REALM_ID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`USERNAME` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`CREATED_TIMESTAMP` bigint(20) DEFAULT NULL,
`SERVICE_ACCOUNT_CLIENT_LINK` varchar(36) COLLATE utf8_unicode_ci DEFAULT NULL,
`NOT_BEFORE` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
UNIQUE KEY `UK_DYKN684SL8UP1CRFEI6ECKHD7` (`REALM_ID`,`EMAIL_CONSTRAINT`),
UNIQUE KEY `UK_RU8TT6T700S9V50BU18WS5HA6` (`REALM_ID`,`USERNAME`),
KEY `IDX_USER_EMAIL` (`EMAIL`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
А также я создал эту тестовую таблицу в новой БД и поместил в один и тот же триггер, он отлично работает с обеими таблицами:
CREATE TABLE `test` (
`ID` varchar(256) NOT NULL,
`FIRST_NAME` varchar(256) NOT NULL,
`LAST_NAME` varchar(256) NOT NULL,
`SOMETHING` varchar(256) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Дело в том, что я не знаю, какой sql Keycloak будет выполняться, когда он получит запрос на регистрацию от своего адаптера, и я не могу воспроизвести проблему с моей таблицей.