MariaDB - 使用“AS”创建的列的默认值为 1024 [重复]

Posted

技术标签:

【中文标题】MariaDB - 使用“AS”创建的列的默认值为 1024 [重复]【英文标题】:MariaDB - Column created with 'AS' has a default value of 1024 [duplicate] 【发布时间】:2018-08-05 21:09:11 【问题描述】:

我有这个问题

SELECT Stations.Instance
    ,stations.ID
    ,stations.Name
    ,Stations.Lat
    ,Stations.Lon
    ,(
        SELECT GROUP_CONCAT(Line SEPARATOR ';')
        FROM transportData.timeTables
        WHERE timeTables.Station = stations.ID
        GROUP BY timeTables.Station
        ) AS 'Lines'
    ,(
        SELECT GROUP_CONCAT(Weekdays SEPARATOR ';')
        FROM transportData.timeTables
        WHERE timeTables.Station = stations.ID
        GROUP BY timeTables.Station
        ) AS 'Weekdays'
    ,(
        SELECT GROUP_CONCAT(Weekends SEPARATOR ';')
        FROM transportData.timeTables
        WHERE timeTables.Station = stations.ID
        GROUP BY timeTables.Station
        ) AS 'Weekends'
FROM `Stations`
INNER JOIN transportData.stations ON stations.Lat = Stations.Lat
    AND stations.Lon = Stations.Lon
WHERE Instance = '$instance'

应该在 Weekdays 列中返回 Weekdays 的列表,该列表与 transportData.stationsID 列具有相同的 Station 列。周末也一样。

我的问题是这些列通常很大,大约 2000 个字符,通过这个查询,我最多可以连接其中的 10 个,所以字符很多。

上面的查询有效,但返回的 Weekdays 和 Weekends 的最大长度为 1024,这根本不够。

如何告诉 MariaDB 我想要超过 1024 个字符的结果?

【问题讨论】:

不相关:考虑 LEFT JOIN 和条件聚合,而不是那些相关的子查询。 您的transportData.timeTables.WeekdaystransportData.timeTables.Weekends 列是什么数据类型? 【参考方案1】:

您可以扩展 group_concat 限制,更改 my.ini

group_concat_max_len = 10000

【讨论】:

不错的想法,但我认为 10,000 不足以存储 10 个包含 2,000 个字符的列的副本。 这很好用,我使用最大长度作为最大 32 位 我的价值观只是一个建议......而且 OP 似乎找到了正确的长度......

以上是关于MariaDB - 使用“AS”创建的列的默认值为 1024 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

oracle的主键要设置默认值为自动递增,怎么处理?

如果未在 NOT NULL 枚举列上指定值,如何使 MariaDB 产生错误?

SQL:将所有没有默认值的列的默认值设置为 NULL

如何使用 MYSQL 在最终表中包含所有列的默认值为 0 的缺失行?

添加默认值为 0.0 的列

将数据转换为 ssms 中的列的简单方法