我创建了一个视图,使用GROUP_CONCAT
将查询结果连接在一起,这些结果来自于数据类型为'varchar(7) utf8_general_ci'
的products
列,最终呈现在名为concat_products
的列中。
问题是MySQL截断了concat_products
列的值。phpMyAdmin显示concat_products
列的数据类型为varchar(341) utf8_bin
。
表格products
:
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。
编辑
VARCHAR列中的值是可变长度字符串。长度可以指定为0到65,535。
为什么MySQL针对“concat_products”列指定超过255个字符的
varchar
?(已解决!)为什么使用
utf8_bin
而不是utf8_general_ci
?是否可以更改视图中列的数据类型,例如在我的情况下更改“concat_products”列的数据类型为文本?
如果不能,我该如何防止MySQL截断“concat_products”列?