当前位置: 首页 > 面试题库 >

Mysql截断GROUP_CONCAT函数的连接结果

梁丘波
2023-03-14
问题内容

我创建它使用GROUP_CONCAT来连接的结果从数据类型的产品列的查询视图'varchar(7) utf8_general_ci'在一个名为列concat_products。问题是mysql截断了concat_products列的值。phpMyAdmin表示concat_products列的数据类型为varchar(341) utf8_bin

餐桌产品:

CREATE TABLE `products`(
`productId` tinyint(2) unsigned NOT NULL AUTO_INCREMENT, 
`product` varchar(7) COLLATE utf8_general_ci NOT NULL, 
`price` mediumint(5) unsigned NOT NULL, 
PRIMARY KEY (`productId`)) 
ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci

concat_products_vw查看:

CREATE VIEW concat_products_vw AS
SELECT
  `userId`,
    GROUP_CONCAT(CONCAT_WS('_', `product`, `productId`, `price`) 
        ORDER BY `productId` ASC SEPARATOR '*') AS concat_products
FROM
  `users`
LEFT JOIN `products` 
ON `users`.`accountBalance` >= `product`.`price`
GROUP BY `productId`

根据mysql手册

VARCHAR列中的值是可变长度的字符串,
长度可以指定为MySQL 4.0.2之前的1到255之间的值,以及MySQL 4.0.2以后的0到255之间的值。

编辑:

Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 65,535.

  1. 为什么mysql为varchar concat_products列指定超过255个字符?(已解决!)

  2. 为什么用uf8_bin而不是utf8_general_ci?

  3. 是否可以将视图中的列的数据类型更改为例如concat_products列的文本?

  4. 如果不是,我该如何防止mysql截断concat_products列?


问题答案:

正如我在前面的评论中所写,MySQL手册说:

VARCHAR列中的值是可变长度的字符串。长度可以指定为0到65535之间的值。

因此,问题不在于字段的数据类型。

在MySQL手册也说:

结果被截断为由group_concat_max_len系统变量指定的最大长度,该默认值的默认值为1024。尽管返回值的有效最大长度受max_allowed_pa​​cket的值限制,但可以将其设置为更高的值。在运行时更改group_concat_max_len的值的语法如下,其中val是一个无符号整数:SET
[GLOBAL | SESSION] group_concat_max_len = val;

更改group_concat_max_len的值的选项是:

  1. 通过将以下内容附加到命令来更改MySQL启动时的值:
    --group_concat_max_len=your_value_here

  2. 在您的MySQL配置文件(mysql.ini)中添加以下行: group_concat_max_len=your_value_here

  3. 在MySQL启动后运行以下命令:
    SET GLOBAL group_concat_max_len=your_value_here;

  4. 在打开MySQL连接后运行以下命令:
    SET SESSION group_concat_max_len=your_value_here;

文档:SET,服务器系统变量:group_concat_max_len



 类似资料:
  • 问题内容: 我有以下SQL(我删除了一些selesct fi: 这将撤回我的所有任务以及与该任务相关的所有注释。我的问题是评论字段;使用 GROUP_CONCAT 创建的文件将截断输出。我不知道为什么,我也不知道如何克服这个问题。(看起来是341ish字符) 问题答案: 默认情况下,GROUP_CONCAT()限制为1024个字节。 要解决此限制并允许最多100 KB的数据,请添加my.cnf或使

  • 我有一个代表. csv文件结构的自定义类,它稍后会读入该类的arrayList。它有以下标签: 这是简化的. csv文件: 当我将这些读入arrayList并将各个状态放在consolse上只是为了检查时,它会正确显示(IN_STOCK,OUT_OF_STOCK)。但是,当我尝试将其插入数据库时,它会被截断: java.sql.SQLException:第1行的列“Status”的数据被截断 以下

  • 功能限制拦截断点 bp EnableMenuItem 禁止或允许菜单项 bp EnableWindow 禁止或允许窗口

  • 问题内容: 我需要使MySQL服务器在客户端断开连接后立即回滚事务,因为每个客户端可以同时工作。可以 在客户端A 上重现这些问题(使用innodb表类型) : 在客户B上: 我已经设置了MySQL的服务器选项,并且在两个客户端上都使用了mysql的客户端。我在网络上使用一台服务器和两个客户端进行了尝试。下线后,我物理断开了网络连接(拔下电缆)。我需要使其他客户端能够立即在事务上使用(锁定它,更新它

  • 问题内容: 我正在尝试将基于MySQL的应用程序迁移到Microsoft SQL Server 2005(不是按需选择,但这是必须的)。 在原始应用程序中,我们 几乎 完全使用 了 ANSI-SQL兼容的语句,但有一个明显的例外- 我们相当频繁地使用MySQL的函数。 顺便说一句,这样做:给一个表,例如,雇员姓名和项目… 返回: ……这就是使用group_concat得到的结果: 返回: 因此,我

  • 本文向大家介绍MySQL统计函数GROUP_CONCAT使用陷阱分析,包括了MySQL统计函数GROUP_CONCAT使用陷阱分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了MySQL统计函数GROUP_CONCAT使用中的陷阱。分享给大家供大家参考,具体如下: 最近在用MySQL做一些数据的预处理,经常会用到group_concat函数,比如类似下面一条语句 sql语句比较简单,按照