Усечение данных: '' при вставке или обновлении значения - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь вставить / обновить строку (JSON).При вставке / обновлении значения я получаю ошибку усечения данных.

Я попытался создать столбец типа JSON и передать тип JSON_OBJECT (), но это также не удалось.

select '''[{"id":"1202","title":"Asian","notes":"","active":"1"}]''';

CREATE TABLE mktesttable (
    id int NOT NULL,
    s VARCHAR(34530) NOT NULL
);

INSERT INTO mktesttable
select 1, '''[{"id":"1202","title":"Asian","notes":"","active":"1"}]''';

select *  from mktesttable;

//Это работает


INSERT INTO mktesttable
SELECT 
    patient_data.id, 
    CONCAT(
        '''[{"id":"',   patient_data.race,
        '","title":"',  list_options.title, 
        '","notes":"',  list_options.notes, 
        '","active":"', list_options.active,
        '"}]'''
    ) as s
FROM 
    patient_data 
    INNER JOIN list_options 
        ON patient_data.race = list_options.id order by 1 desc

Дает тот же результат (ID и данные различаются), но не работает

Набор результатов

1 Ответ

0 голосов
/ 06 февраля 2019

Если вы хотите сохранить объект JSON, вы должны использовать тип данных JSON вместо строк.Чтобы создать объект JSON, вы можете использовать JSON_OBJECT.

CREATE TABLE mktesttable (
    id int NOT NULL,
    s JSON NOT NULL
);

INSERT INTO mktesttable
SELECT 
    patient_data.id, 
    JSON_OBJECT(
        'id',     patient_data.race,
        'title',  list_options.title, 
        'notes',  list_options.notes, 
        'active', list_options.active,
    )
FROM 
    patient_data 
    INNER JOIN list_options 
        ON patient_data.race = list_options.id 
ORDER BY patient_data.id desc

Если вам нужен массив JSON, как показано в примере данных, то:

    JSON_ARRAY(
        JSON_OBJECT(
            'id',     patient_data.race,
            'title',  list_options.title, 
            'notes',  list_options.notes, 
            'active', list_options.active,
        )
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...