MYSQL查询隐藏字符失败?

MYSQL查询隐藏字符失败?,mysql,Mysql,我一直在想一个可能隐藏的价值 每当我运行此查询时 SELECT * FROM LIST WHERE `GROUP_2` = "Yes"; 我得到0个结果 每当我运行此命令时: SELECT * FROM LIST WHERE `GROUP_2` LIKE 'Yes%'; 我能得出结果 我使用MySQL load data for csv导入尝试了许多不同的导出和导入参数,但都不起作用。组_1和组_2都设置为varchar(55) 我可以运行任何查询来确定此问题的原因或检测隐藏的特征线吗 ID

我一直在想一个可能隐藏的价值

每当我运行此查询时

SELECT * FROM LIST WHERE `GROUP_2` = "Yes";
我得到0个结果

每当我运行此命令时:

SELECT * FROM LIST WHERE `GROUP_2` LIKE 'Yes%';
我能得出结果

我使用MySQL load data for csv导入尝试了许多不同的导出和导入参数,但都不起作用。组_1和组_2都设置为varchar(55)

我可以运行任何查询来确定此问题的原因或检测隐藏的特征线吗

ID  name    GROUP_1 GROUP_2
1   Bob     No      Yes
2   Jim     Yes     No

我自己从未尝试过,但我认为这将识别任何带有“不可见”字符的行

SELECT * 
FROM theTable 
WHERE field REGEXP '[^[:graph:] ]+' --This allows spaces, even leading/trailing ones
OR field <> TRIM(field) --This catches those spaces
;
选择*
从表格
其中字段REGEXP'[^[:graph:]+'--这允许使用空格,甚至是前导/尾随空格
或字段修剪(field)--这将捕获这些空间
;

不过,它不会识别或修复有问题的字符,只会识别该字段中包含这些字符的行。

要识别问题所在,可以使用函数:

SELECT group_1, HEX(group_1)
FROM table
WHERE group_1 LIKE 'Yes%' AND group_1!='Yes'
yes应编码为
596573
(根据所使用的代码集,可能会有所不同),但后面会出现一些其他字符

编辑

我建议您找到根本原因并修复文本文件或导入过程。但是,如果您希望在不进行新导入的情况下修复现有数据,则有多个选项

您可以点击xQbert链接(感谢链接!):

或者修复您自己的查询:

UPDATE TABLE set GROUP_2 = replace(replace(GROUP_2,'\n',''), '\r', '');
或者,如果只有“是/否”值:

UPDATE TABLE set GROUP_2='Yes' WHERE group_2 LIKE 'Yes%' AND group_2!='Yes';
UPDATE TABLE set GROUP_2='No' WHERE group_2 LIKE 'No%' AND group_2!='No';

我最初的问题是由源数据以及我用于导入文件的方法引起的

每当我直接使用equal查询时,我都不会返回值,当使用类似于“Yes%”的值时,这会

通过使用以下命令:

SELECT GROUP_2, HEX(GROUP_2)
FROM QUEUE
WHERE GROUP_2 LIKE 'Yes%';
这有助于识别添加的0D十六进制,它是导致查询失败的回车符

对此的快速修复方法是使用以下命令更新字段

UPDATE QUEUE set GROUP_2 = replace(GROUP_2,'\r','');
但由于每次更新数据时都需要这样做,因此我发现可以在原始装载数据中识别车厢的位置。使用的原始语法是:

LINES TERMINATED BY '\n' 
然后我改成了

LINES TERMINATED BY '\r' 

这允许源数据保持不变。

您刚刚帮助确认组2中的每个条目都有隐藏的内容。根据该字段中数据的不同,隐藏可能会很乏味,但您可以开始使用mysql字符串函数(如ASCII()和SUBSTR())来识别它们。识别后,您可以添加最小的
REPLACE(REPLACE(字段,字符(x),“”),字符(y),“”)作为字段
表达式来修复数据@伦弗利:那是一个隐藏的回车;)也就是说,查看源以尝试识别添加的字段。也尝试了但失败的更新表集GROUP_2=replace(GROUP_2,'\r\n','');更新表格集组_2=替换(组_2,'\n','')@renfley这几乎是正确的,但它失败了,因为您只有\r\n一个答案,而没有\r\n一个答案,我已经更新了我的答案
LINES TERMINATED BY '\r'