我创建它使用GROUP_CONCAT来连接的结果从数据类型的产品列的查询视图'varchar(7) utf8_general_ci'在一个名为列concat_products。问题是mysql截断了concat_products列的值。phpMyAdmin表示concat_products列的数据类型为varchar(341) utf8_bin
'varchar(7) utf8_general_ci'
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手册说:
VARCHAR列中的值是可变长度的字符串。长度可以指定为0到65535之间的值。
因此,问题不在于字段的数据类型。
在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的值的选项是:
通过将以下内容附加到命令来更改MySQL启动时的值: --group_concat_max_len=your_value_here
--group_concat_max_len=your_value_here
在您的MySQL配置文件(mysql.ini)中添加以下行: group_concat_max_len=your_value_here
group_concat_max_len=your_value_here
在MySQL启动后运行以下命令: SET GLOBAL group_concat_max_len=your_value_here;
SET GLOBAL group_concat_max_len=your_value_here;
在打开MySQL连接后运行以下命令: SET SESSION group_concat_max_len=your_value_here;
SET SESSION group_concat_max_len=your_value_here;
文档:SET,服务器系统变量:group_concat_max_len