首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在view列中设置VARCHAR大小

在view列中设置VARCHAR大小
EN

Stack Overflow用户
提问于 2020-10-16 15:28:41
回答 1查看 55关注 0票数 0

在使用下面的SQL代码创建视图时遇到问题。

property_changedproperty_values创建的列默认设置为最外层的连接的大小。

当稍后在代码中使用这些列时,这就成了一个问题,因为我需要这些列是current-string + 50个字符。

代码语言:javascript
复制
    CREATE OR REPLACE VIEW  \`my_view\` AS
        select *,
            CONCAT('[', GROUP_CONCAT(CONCAT('"', table.property_name, '"')), ']') AS property_changed,
            CONCAT('[',
                    GROUP_CONCAT(JSON_OBJECT('old_value', old_value, 'new_value', new_value)),
                    ']'
                ) AS property_values
        
        from table_log table
group by id, p_o_id, p_o_v, date_created, name, e_name

我尝试过以所有不同的方式使用MySQL强制转换,但代码每次都失败。这里是否有什么东西阻止我使用CAST(....作为VARCHAR(300)?

或者有没有其他我还没有意识到的实现这一点的方法?

EN

回答 1

Stack Overflow用户

发布于 2020-10-16 15:46:22

您的代码使其看起来像是在尝试生成JSON数组。如果是这样,并且假设您运行的是MySQL 5.7.22或更高版本,请不要使用字符串连接函数: MySQL为此提供了JSON_ARRAYAGG()

这更简单、更高效、更安全(例如,如果您的一些值包含嵌入的双引号,则MySQL将为您处理转义)。

代码语言:javascript
复制
select id, p_o_id, p_o_v, date_created, name, e_name,
    JSON_ARRAYAGG(property_name) AS property_changed,
    JSON_ARRAYAGG(JSON_OBJECT('old_value', old_value, 'new_value', new_value)) AS property_values
from table_log table
group by id, p_o_id, p_o_v, date_created, name, e_name

这将生成JSON数据类型的列,而不是字符串-在这里似乎更相关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64384725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档