我有一个MySQL查询,95%的时间都没有显示结果。查询非常简单,应该可以获得特定节点需要备份的一周中的日期。我将数据从CSV导入到mysql
我发现当我手动编辑节点名称时,删除最后一个字符并手动重新键入它可以修复该节点的问题。所以我怀疑隐形尾随字符。我试图用以下命令修复它,但它确实解决了这个问题:
UPDATE tsm_nodes SET node_name = TRIM(TRAILING '\r' FROM node_name);
UPDATE tsm_nodes SET node_name = TRIM(TRAILING '\n' FROM node_name);
UPDATE tsm_nodes SET node_name = TRIM(node_name);
来自[THIS]的解决方案[1]所以问题显示尾随字符显示0结果:
SELECT * FROM Foo WHERE CHAR_LENGTH(field) != CHAR_LENGTH(TRIM(field))
查询:
SELECT DISTINCT ts.daysofweek FROM tsm_schedules ts, tsm_nodes tn
WHERE tn.node_name = ? AND tn.schedule = ts.name;
是否有其他方法可以找出有什么尾随字符,它们在任何看不见的情况下都是隐形的。由于有1500多个节点,因此无法手动编辑所有字段。任何帮助表示赞赏。
EDIT2:为了让事情更奇怪,当我编辑节点而没有通过PHPMyAdmin调整任何信息并再次保存时,查询适用于该节点。
编辑:
回答Jens的建议:这并没有显示任何有用的信息:
+--------------------------------+
| HEX(node_name) |
+--------------------------------+
| 424F4E4866733031 |
| 424F4E486C696E3031 |
| 73716C32303035 |
| 57324B382D6170706C31 |
| 57326B382D737978 |
| 4172636F323030382D3332626974 |
| 70726E736572766572 |
| 5365727665724172636F |
| 77326B382D67656F6974 |
| 77326B382D736563757265 |
| 57324B382D65786368616E6765 |
| 57326B382D7368617265706F696E74 |
| 41444D2D41444D494E |
| 42524F434144455242 |
| 41434E5F53514C5F44423032 |
| 41434E5F53514C5F4442 |
| 41434E5F53514C5F44423031 |
| 4745414343415448454E41 |
| 47454143434242433031 |
| 47454143434242433033 |
| 47454143434242433034 |
| 47454143434242433035 |
| 474541434345525041 |
| 474541434345525043 |
| 474541434345525045 |
+--------------------------------+
所有来自Rahul Tripathi的查询都没有解决:
UPDATE tsm_nodes SET node_name = TRIM(BOTH UNHEX('C2A0') FROM node_name)
答案 0 :(得分:0)
你可以尝试使用它:
TRIM(BOTH UNHEX('C2A0') FROM node_name)
答案 1 :(得分:0)
我找到了原因。当我开始手动编辑PHPMyAdmin中的条目时,我在查询的输出中注意到尾随字符的问题是在schedule字段,而不是node_name
UPDATE `cipal`.`tsm_nodes` SET `schedule` = 'WE0230' WHERE `tsm_nodes`.`id` = 153;
执行以下查询后问题得以解决。
UPDATE tsm_nodes SET `schedule` = TRIM(TRAILING '\r' FROM `schedule`);