我用concat函数连接几个字符串时,要连接的字符串要用单引号''连接,但是有时我要连接的字符串本身就带有单引号'',这时该怎么办?比如:连接select * from text和where name='陈'这样一个查询语句时该怎么办?谢谢!

解决方案 »

  1.   

    SET @cmd = CONCAT('SELECT * FROM `text` ','WHERE name=''陈''');
    SELECT @cmd;
      

  2.   

    SET @cmd = CONCAT('SELECT * FROM `text` ','WHERE name=\'陈\'');
    SELECT @cmd;
      

  3.   

    mysql> SET @cmd = CONCAT('SELECT * FROM `text` ','WHERE name=''陈''');
    Query OK, 0 rows affected (0.00 sec)mysql> SELECT @cmd;
    +--------------------------------------+
    | @cmd                                 |
    +--------------------------------------+
    | SELECT * FROM `text` WHERE name='陈' |
    +--------------------------------------+
    1 row in set (0.00 sec)mysql> SET @cmd = CONCAT('SELECT * FROM `text` ','WHERE name=\'陈\'');
    Query OK, 0 rows affected (0.00 sec)mysql> SELECT @cmd;
    +--------------------------------------+
    | @cmd                                 |
    +--------------------------------------+
    | SELECT * FROM `text` WHERE name='陈' |
    +--------------------------------------+
    1 row in set (0.00 sec)
      

  4.   

    如上所例,使用转义了。具体你可以参考一下MySQL官方文档
    http://dev.mysql.com/doc/refman/5.1/zh/language-structure.html#string-syntax
    9.1.1. 字符串
    在字符串中,某些序列具有特殊含义。这些序列均用反斜线(‘\’)开始,即所谓的转义字符。MySQL识别下面的转义序列:\0 
     ASCII 0(NUL)字符。
     
    \' 
     单引号(‘'’)。
     
    \" 
     双引号(‘"’)。
     
    下面的SELECT语句显示了引用和转义如何工作:[code=BatchFile]mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
    +-------+---------+-----------+--------+--------+
    | hello | "hello" | ""hello"" | hel'lo | 'hello |
    +-------+---------+-----------+--------+--------+mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
    +-------+---------+-----------+--------+--------+
    | hello | 'hello' | ''hello'' | hel"lo | "hello |
    +-------+---------+-----------+--------+--------+
    [/code]