【发布时间】:2012-08-13 16:09:55
【问题描述】:
我创建了一个视图,它使用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.
-
为什么 MySQL 为
varchar"concat_products" 列指定超过 255 个字符? (已解决!) -
为什么是
uf8_bin而不是utf8_general_ci? -
是否可以将视图中列的数据类型更改为“concat_products”列的文本?
-
如果不能,我该怎么做才能防止 MySQL 截断“concat_products”列?
【问题讨论】:
-
你用的是什么版本的 MySQL?
-
仔细检查您的来源。 MySQL manual 说:VARCHAR 列中的值是可变长度字符串。长度可以指定为 0 到 65,535 之间的值。
-
@Jocelyn 你是对的,如果 mysql 可以在 varchar 列中存储多达 65535 个字符,为什么还要在这里截断?