【问题标题】:MySQL adding extra backslashes?MySQL添加额外的反斜杠?
【发布时间】:2011-03-02 11:24:56
【问题描述】:
@@SESSION.sql_mode;
@@GLOBAL.sql_mode;

两者都是空白,my.cnf 没有显示“NO_BACKSLASH_ESCAPE”标志,这是在我的本地服务器上运行但不在我的主服务器上运行的查询的一部分。

UPDATE `table` 
SET `data` = "[{\"_talent\'s\"etc"

现在我知道我可以使用“[{”“_talents”“etc”,但我宁愿不使用,因为我更容易保持以前一直有效的当前转义安全方法。

我正在更新的表的字符集是 UTF-8。最奇怪的是,它只能插入而不是更新!

这个真的让我抓狂。有什么想法吗?

干杯

编辑:

我发现服务器正试图像这样解释查询:

Failed to execute SQL : SQL UPDATE `build` SET `data` = "[{\"_talent\'s" WHERE `build_id` = 1 AND `userId` = 1128; failed : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE `build` SET `data` = "[{\\"_talent\\'s" WHERE `build_id` = 1 AND `userId`' at line 1

当然应该是一样的,为什么 SQL 引擎逃脱了我的逃脱!? (如果我省略了转义,查询仍然失败)

【问题讨论】:

  • Blackslash...这是黑色安息日和枪炮玫瑰的某种组合吗?请原谅双关语。忍不住了。
  • 请有人帮忙,我快疯了。它适用于我的本地服务器,但不适用于网络服务器。网络服务器似乎双重转义了相同的语句! :S

标签: mysql


【解决方案1】:

你可以试试这个-

UPDATE 'table' 
SET 'data' = '[{"_talents"etc'

【讨论】:

  • 您的编辑确实有效,但如果我将字符串更改为 Talent's,它会再次失败
  • @Dorjan - 试试这个,如果你使用单引号而不是双引号
  • 我已经完成了,它确实有效,直到我需要一个 's,这个感觉完全不合逻辑,但我确信这不起作用有一个理智的原因:S 有什么与 utf8_general_ci 或 InnoDB 有什么关系?
【解决方案2】:

这有关系吗?

MySQL / PHP problem with " and '

这意味着您可能在某处启用了魔术引号以添加额外的反斜杠(这可以解释为什么您的服务器上出现奇怪的行为而不是本地计算机)?

两个平台上的不同行为对我来说意味着服务器上存在一些配置问题(你确定它们是相同的版本吗?)不过我在这里有点。

【讨论】:

  • 我的回答的第二部分更相关。 :)
【解决方案3】:

我发现它似乎是我的 webmin 版本,将其添加到控制台... d'oh

当我从 PHP 运行查询时,它完美地完成了。

非常感谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2021-03-15
    • 2019-07-04
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    相关资源
    最近更新 更多