pou*_*uya 42 mysql types truncate 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
Run Code Online (Sandbox Code Playgroud)
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`
Run Code Online (Sandbox Code Playgroud)
根据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.
为什么mysql为varchar concat_products列指定了超过255个字符?(已解决!)
为什么uf8_bin而不是utf8_general_ci?
是否可以将视图中列的数据类型更改为例如在我的情况下为concat_products列的文本?
如果不是我能做些什么来阻止mysql截断concat_products列?
Joc*_*lyn 74
正如我在之前的评论中所写,MySQL手册说:
VARCHAR列中的值是可变长度字符串.长度可以指定为0到65,535之间的值.
所以问题不在于字段的数据类型.
在MySQL手册也说:
结果被截断为group_concat_max_len系统变量给出的最大长度,该变量的默认值为1024.尽管返回值的有效最大长度受max_allowed_packet的值约束,但该值可以设置得更高.在运行时更改group_concat_max_len的值的语法如下,其中val是无符号整数:SET [GLOBAL | SESSION] group_concat_max_len = val;
您更改group_concat_max_len值的选项有:
--group_concat_max_len=your_value_heregroup_concat_max_len=your_value_hereSET GLOBAL group_concat_max_len=your_value_here;SET SESSION group_concat_max_len=your_value_here;文档:SET,服务器系统变量:group_concat_max_len
正如乔斯林所提到的那样,GROUP_CONCAT()结果的大小受到限制group_concat_max_len,但是有一个额外的相互作用ORDER BY导致进一步截断到1/3 group_concat_max_len.例如,请参阅此相关答案.
默认值为group_concat_max_len1024,而1024/3 = 341可能解释了为什么concat_products的类型显示为varchar(341)原始示例中的原因.如果要删除该GROUP BY productId子句,concat_products应显示为varchar(1024).
我还没有发现之间的这种互动GROUP_CONCAT()和ORDER BY中提到的MySQL手册,但它至少影响到MySQL服务器5.1.
| 归档时间: |
|
| 查看次数: |
20243 次 |
| 最近记录: |