我创建它使用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手册说:
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
在您的MySQL配置文件(mysql.ini)中添加以下行: group_concat_max_len=your_value_here
在MySQL启动后运行以下命令:
SET GLOBAL group_concat_max_len=your_value_here;
在打开MySQL连接后运行以下命令:
SET SESSION group_concat_max_len=your_value_here;
文档:SET,服务器系统变量:group_concat_max_len
问题内容: 我有以下SQL(我删除了一些selesct fi: 这将撤回我的所有任务以及与该任务相关的所有注释。我的问题是评论字段;使用 GROUP_CONCAT 创建的文件将截断输出。我不知道为什么,我也不知道如何克服这个问题。(看起来是341ish字符) 问题答案: 默认情况下,GROUP_CONCAT()限制为1024个字节。 要解决此限制并允许最多100 KB的数据,请添加my.cnf或使
我有一个代表. csv文件结构的自定义类,它稍后会读入该类的arrayList。它有以下标签: 这是简化的. csv文件: 当我将这些读入arrayList并将各个状态放在consolse上只是为了检查时,它会正确显示(IN_STOCK,OUT_OF_STOCK)。但是,当我尝试将其插入数据库时,它会被截断: java.sql.SQLException:第1行的列“Status”的数据被截断 以下
功能限制拦截断点 bp EnableMenuItem 禁止或允许菜单项 bp EnableWindow 禁止或允许窗口
问题内容: 我需要使MySQL服务器在客户端断开连接后立即回滚事务,因为每个客户端可以同时工作。可以 在客户端A 上重现这些问题(使用innodb表类型) : 在客户B上: 我已经设置了MySQL的服务器选项,并且在两个客户端上都使用了mysql的客户端。我在网络上使用一台服务器和两个客户端进行了尝试。下线后,我物理断开了网络连接(拔下电缆)。我需要使其他客户端能够立即在事务上使用(锁定它,更新它
问题内容: 我正在尝试将基于MySQL的应用程序迁移到Microsoft SQL Server 2005(不是按需选择,但这是必须的)。 在原始应用程序中,我们 几乎 完全使用 了 ANSI-SQL兼容的语句,但有一个明显的例外- 我们相当频繁地使用MySQL的函数。 顺便说一句,这样做:给一个表,例如,雇员姓名和项目… 返回: ……这就是使用group_concat得到的结果: 返回: 因此,我
本文向大家介绍MySQL统计函数GROUP_CONCAT使用陷阱分析,包括了MySQL统计函数GROUP_CONCAT使用陷阱分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了MySQL统计函数GROUP_CONCAT使用中的陷阱。分享给大家供大家参考,具体如下: 最近在用MySQL做一些数据的预处理,经常会用到group_concat函数,比如类似下面一条语句 sql语句比较简单,按照