Mysql group by将空格作为相同的值包含在内

Mysql group by将空格作为相同的值包含在内,mysql,sql,string,group-by,count,Mysql,Sql,String,Group By,Count,我有这张桌子 CREATE TABLE table1 ( `ID` VARCHAR(100), `Val` VARCHAR(100), `Val2` VARCHAR(100) ); 这个值呢 INSERT INTO table1 (`ID`, `Val`, `Val2`) VALUES ('1','1234 ','now'), // 1 whitespace ('2','1234 ','now1'), // 2 whitespace ('5','1234 ',

我有这张桌子

CREATE TABLE table1 (
  `ID` VARCHAR(100),
  `Val` VARCHAR(100),
  `Val2` VARCHAR(100)
);
这个值呢

INSERT INTO table1
  (`ID`, `Val`, `Val2`)
VALUES
  ('1','1234 ','now'),  // 1 whitespace
  ('2','1234  ','now1'), // 2 whitespace
  ('5','1234  ','now190'), // 2 whitespace
  ('3','1234   ','now2'), // 3 whitespace
  ('4','3123123','now3')
我需要按数据分组并计算有多少数据具有相同的值,因此我使用了
groupby
count

select Val,count(*) from `table1` group by Val
结果与我期望的不同,因为ID 1、2、5和3的数据被计算为与下面结果相同的值

Val count(*)
1234    4
3123123 1
我如何使结果与下面的预期结果相同,从而使该值不计算为相同的值

Val count(*)
1234    1  // 1 whitespace
1234    2  // 2 whitespace
1234    1  // 3 whitespace
3123123 1

查看此提琴,了解

这正是MySQL在默认情况下的工作方式,除非您使用特定的排序规则。典型的解决方法是使用
二进制

select binary val, count(*) cnt from table1 group by binary val
或者,如果您确实希望在结果集中使用常规字符串而不是二进制字符串:

select max(val) as newval, count(*) cnt from table1 group by binary val

等等,让我先检查一下,如果VARCHAR列保留了尾随空格(我现在指尖没有db),您可以尝试“group by val | |'”。这样尾随空格在group by中的隐式修剪()或填充后仍然有效。您可以将val显示为“| | val | |””,以便识别尾随空格。在任何数据设计中,我都不喜欢尾随空格或null@戴维格。皮克特至少尾随空格比领先要好得多:-)@Gagantous:这是你的@Gagantous:好的,这不是小提琴上显示的。有关解决方案,请参见答案中的“我的编辑”。