【发布时间】:2017-08-17 13:48:32
【问题描述】:
我正在使用 MySQL 文档存储,但不知道如何正确转义 find 语句中带有特殊字符的字符串。
Visual C# 2015 连接器/NET:8.0.8.0
var realmName = "Aman'Thul";
var realm = collection.Find("Name = :name")
.Bind("name", realmName).Limit(1).Execute().FetchOne();
=> System.ArgumentException: Unterminated string starting at 4
问题显然是撇号,但同样的结果出现在括号、连字符等其他“特殊字符”上。
版本 #2:
var realmName = "Aman''Thul";
var realm = collection.Find("Name = :realmName").Bind("realmName", realmName).Limit(1).Execute().FetchOne();
=> System.ArgumentException: Only 1 tokens consumed, out of 3
版本 #3:
var realmName = "Aman\\'Thul";
var realm = collection.Find("Name = :realmName").Bind("realmName", realmName).Limit(1).Execute().FetchOne();
=> System.ArgumentException: Can't parse at pos: 4
在这一点上,我没有想法。正确转义这些表达式的正确方法是什么?必须有一些我似乎找不到的通用解决方案,因为有关 MySQL 文档存储的信息很少。
【问题讨论】:
-
我只是在猜测,但是离开文档,你会用另一个撇号转义一个撇号,所以为此:
my'name你应该输入my''name。但是,不同的版本有不同的转义方法,还有你已经尝试过的\'选项(虽然只有一个斜线,而不是两个)。 -
双撇号是我的第 2 版,不起作用。单反斜杠转义撇号会导致与版本 #1 相同的错误。
-
这是显而易见的事情,但是您是否尝试过此页面:dev.mysql.com/doc/refman/5.6/en/… 但对于您的版本?
-
啊!您是否尝试过:
var realmName = "\"Aman'Thul\"";因为显然,它会为您自动转义此字符串,但您可能仍需要自己将自动转义的字符串包装在字符串文字中。 (或者也许用单引号括起来,我不确定)。 -
我确实检查了文档,但这些是针对标准 SQL 查询的,在这种情况下不起作用。