MYSQL усек неправильное ДВОЙНОЕ значение при использовании двойных и одинарных кавычек

#mysql #triggers #quotation-marks #mysql-error-1292

Вопрос:

Я создал триггер, который вставляет строку в таблицу после удаления строки в другой таблице.

Вот мой спусковой крючок

 CREATE TRIGGER trigger_delete_log_animal AFTER delete ON animal
FOR EACH ROW
    INSERT INTO log_animais (momento, ocorrencia)
    VALUES (now(), "The register '"   old.nome_animal   "' was deleted from the animal table");
 

Я хочу, чтобы nome_animal находился между одинарными кавычками.

Но я получаю следующую ошибку, когда удаляю строку из таблицы животных:

 Error Code: 1292. Truncated incorrect DOUBLE value: 'The register ''
 

Я пытался изменить его на

 'The register "'   old.nome_animal   '" was deleted from the animal table'
 

А также к

 "The register '"   old.nome_animal   "' was deleted from the animal table"
 

Но это никуда не годится.

Что я делаю не так?

Ответ №1:

Не пытайтесь создавать строки с в своем SQL-коде.

Вместо этого используйте функцию CONCAT() :

  VALUES (now(), CONCAT(
           'The register '', 
            old.nome_animal, 
            '' was deleted from the animal table'));
 

И экранируйте ' символы, которые вы хотите использовать в своих строках .

 'Mrs. O'Leary's cow.'