【问题标题】:Cannot remove trailing characters无法删除尾随字符
【发布时间】:2015-12-23 00:31:08
【问题描述】:

我有一个 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] SO question to show trailing chars 的解决方案显示 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)

【问题讨论】:

  • 你可以使用hex 函数来找出你有什么尾随字符
  • 你可以试试这个:TRIM(BOTH UNHEX('C2A0') FROM node_name)

标签: mysql trim trailing


【解决方案1】:

你可以试试这个:

TRIM(BOTH UNHEX('C2A0') FROM node_name)

【讨论】:

  • 这没有效果。感谢您尝试提供帮助
  • @MartinLaw:- 试试这个:TRIM(REPLACE(node_name,'\r\n',' ')) 或者可能是REPLACE(REPLACE(node_name, '\r', ''), '\n', '');
  • 遗憾的是,这两个建议都没有效果。
【解决方案2】:

我找到了原因。当我开始在 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`);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2018-06-05
    • 2020-03-16
    • 2015-02-10
    • 2011-04-01
    • 1970-01-01
    • 2013-10-03
    相关资源
    最近更新 更多