【问题标题】:MySQL select where like pathMySQL选择类似路径的位置
【发布时间】:2013-02-02 19:01:39
【问题描述】:

将 wordpress 项目设置为其暂存环境,我遇到了一个关于为开发环境设置的路径的问题,并且不适合暂存环境。

所以我需要更新数据库中的路径,从C:\xampp\htdocs\site.com/var/www/site.com

起初,我尝试替换,就像我替换网址一样:

update `wp_slider` set `url` = replace(`url`, 'http://local.', 'http://');

然后是路径:

update `wp_slider` set `path` = replace(`path`, 'C:\xampp\htdocs\site.com', '/var/www/site.com');

这实际上没有用。然后我尝试了SELECT 看看我可以检索哪些行:

SELECT * FROM `wp_slider` WHERE `path` LIKE "%C:\xampp\htdocs\site.com%"

这将返回一个空结果。我错过了什么?

忘了提一下,我尝试通过执行 \\ 来转义 \,但我仍然没有得到任何结果

我要替换的完整路径如下:C:\xampp\htdocs\site.com/wp-content/plugins/slider/skins/slider\circle\circle.css

【问题讨论】:

  • 仅将xampp 传递给where path like "%xampp%" 并检查您的第二个update 会发生什么
  • 我需要替换坑旧路径,你刚才提到的,只会替换xampp...至少我认为会这样

标签: mysql select where sql-like


【解决方案1】:

大概是这样:

mysql> SELECT REPLACE('C:\\xampp\\htdocs\\site.com\\foo\\bar.txt', 'C:\\xampp\\htdocs\\site.com', '/var/www/site.com');
+----------------------------------------------------------------------------------------------------------+
| REPLACE('C:\\xampp\\htdocs\\site.com\\foo\\bar.txt', 'C:\\xampp\\htdocs\\site.com', '/var/www/site.com') |
+----------------------------------------------------------------------------------------------------------+
| /var/www/site.com\foo\bar.txt                                                                            |
+----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

如果您得到零匹配,那是因为您的数据库记录不包含您认为的内容。确保没有空格或控制字符。如果您的 MySQL 客户端无法轻松发现此类情况,您可以随时使用HEX()

SELECT path, HEX(path)
FROM wp_slider
WHERE path NOT LIKE "C:\\xampp\\htdocs\\site.com%"

此外,我不完全确定您是否可以在 Unix 系统中使用 \ 作为路径分隔符。我建议你也更换它:

UPDATE wp_slider
SET path = replace(path, '\\', '/')
WHERE path IS NOT NULL

更新:

我要解释的是,您的程序基本上是正确的(除了转义 \ 并不总是可选的):

mysql> CREATE TABLE wp_slider(
    -> path VARCHAR(2083)
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO wp_slider (path) VALUES ('C:\\xampp\\htdocs\\site.com/wp-content/plugins/slider/skins/slider\\circle\\circle.cs
s');
Query OK, 1 row affected (0.04 sec)

mysql> UPDATE wp_slider SET path=REPLACE(path, 'C:\\xampp\\htdocs\\site.com', '/var/www/site.com');
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM wp_slider;
+----------------------------------------------------------------------------+
| path                                                                       |
+----------------------------------------------------------------------------+
| /var/www/site.com/wp-content/plugins/slider/skins/slider\circle\circle.css |
+----------------------------------------------------------------------------+
1 row in set (0.00 sec)

如果您没有得到匹配,那是因为您的数据库包含的数据与您想象的不同,例如(但不限于)空格或控制字符:

mysql> TRUNCATE TABLE wp_slider;
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO wp_slider (path) VALUES ('C:\xampp\htdocs\site.com/wp-content/plugins/slider/skins/slider\circle\circle.css');
Query OK, 1 row affected (0.02 sec)

mysql> UPDATE wp_slider SET path=REPLACE(path, 'C:\\xampp\\htdocs\\site.com', '/var/www/site.com');
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> SELECT * FROM wp_slider;
+------------------------------------------------------------------------------+
| path                                                                         |
+------------------------------------------------------------------------------+
| C:xampphtdocssite.com/wp-content/plugins/slider/skins/slidercirclecircle.css |
+------------------------------------------------------------------------------+
1 row in set (0.00 sec)

在最后一个示例中,我们在插入时忘记转义\,因此在替换时我们没有得到匹配,因为输入数据不是我们认为的那样。

【讨论】:

  • 它只是表明你还没有理解它:(
  • 我将'\\' 更改为'/',然后更新了路径,一切顺利。谢谢
【解决方案2】:

您需要转义反斜杠:\\

【讨论】:

  • 试过了...还是一样的结果
猜你喜欢
  • 2020-04-30
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2012-04-04
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多