代码之家  ›  专栏  ›  技术社区  ›  tog22

如何在sql中显示和搜索隐藏字符(换行符等)

  •  4
  • tog22  · 技术社区  · 15 年前

    我有一个很大的mysql数据库,其中有很多文本(比如'[new line]normal'),我想找到并替换它们。但是,我无法通过以下任何搜索找到它,因为我不确定在[新行]出现的地方使用了什么字符-因此我提出了问题。

    SELECT * FROM table WHERE field LIKE "%<!--[if gte mso 9]><xml>\nNormal%";
    
    SELECT * FROM table WHERE field LIKE "%<!--[if gte mso 9]><xml>\rNormal%";
    
    SELECT * FROM table WHERE field LIKE "%<!--[if gte mso 9]><xml>\n\rNormal%";
    
    SELECT * FROM table WHERE field LIKE "%<!--[if gte mso 9]><xml>\r\nNormal%";
    

    谢谢你能给我的帮助…

    3 回复  |  直到 15 年前
        1
  •  3
  •   Adrian    15 年前

    您可以将行尾设置为CR/LF,即13 10(DOS/Windows约定)或仅设置为LF-10(Unix约定)

    确保第一个事件的任何出现都转换为第二个事件:

    UPDATE TABLE
    SET field = REPLACE( field, CONCAT(CHAR(13),CHAR(10)), CHAR(10) )
    

    为了安全起见,您还可以:

    UPDATE TABLE
    SET field = REPLACE( field, CHAR(13), CHAR(10) )
    

    现在任何“行尾”字符都将是10(换行)

    如果你愿意,你可以做如下事情:

    UPDATE TABLE
    SET field = REPLACE( field, CHAR(10), '[LF]' )
    
        2
  •  0
  •   TehShrike    15 年前

    使用此查询不需要更新任何行。

    实际上,您有两个选项—您可以使用char(10)/char(13)方法,正如其他人所指出的,或者您可以实际发送一个带有文本换行符的查询,如下所示:

    SELECT * FROM table WHERE field LIKE "%<!--[if gte mso 9]><xml>
    Normal%";
    

    要在不需要使用文字换行符的情况下运行此查询,请执行以下操作:

    SELECT * FROM table WHERE field LIKE CONCAT("%<!--[if gte mso 9]><xml>", CHAR(13), CHAR(10), "Normal%");
    
        3
  •  0
  •   jwyllie83    15 年前

    在更一般的意义上,可以使用ctrl+v在终端上轻松地键入“隐藏”字符,至少在基于unix的系统上是这样。如果按ctrl+v,则键入的下一个字符将按原样打印到终端,而不是由任何中间系统解释。使用此功能,您可以键入正在使用的任何内容,并搜索换行符、制表符或终端要吃的任何内容。

    如果您使用的是Windows系统,则无法正常工作,但此技巧可能有助于解决有类似问题且无法访问char()函数的人。