我创建了一个视图,该视图用于GROUP_CONCAT
连接对 products 列的查询结果,该列的数据类型'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.
varchar
为什么 MySQL 为“concat_products”列指定超过 255 个字符?(解决了!)为什么
uf8_bin
而不是utf8_general_ci
?是否可以将视图中列的数据类型更改为例如在我的情况下为“concat_products”列的文本?
如果不是,我该怎么做才能防止 MySQL 截断“concat_products”列?