数据截断:”插入或更新值时

时间:2019-02-05 22:03:32

标签: mysql sql

我正在尝试插入/更新字符串(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和数据不同),但不起作用

Result Set

1 个答案:

答案 0 :(得分:1)

如果要存储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,
        )
    )