gpt4 book ai didi

MySQL 截断 GROUP_CONCAT 函数的连接结果

转载 作者:行者123 更新时间:2023-11-30 22:46:17 25 4
gpt4 key购买 nike

我创建了一个 View ,它使用 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” View :

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手册:

Values in VARCHAR columns are variable-length strings
Length can be specified as a value from 1 to 255 before MySQL 4.0.2 and 0 to 255 as of MySQL 4.0.2.


编辑

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

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

  2. 为什么 uf8_bin 而不是 utf8_general_ci

  3. 是否可以将 View 中列的数据类型更改为“concat_products”列的文本?

  4. 如果不是,我该怎么做才能防止 MySQL 截断“concat_products”列?

最佳答案

正如我在之前的评论中所写,MySQL manual说:

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

所以问题不在于字段的数据类型。

MySQL manual还说:

The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024. The value can be set higher, although the effective maximum length of the return value is constrained by the value of max_allowed_packet. The syntax to change the value of group_concat_max_len at runtime is as follows, where val is an unsigned integer: 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 , Server System Variables: group_concat_max_len

关于MySQL 截断 GROUP_CONCAT 函数的连接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29525165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com