C#执行MySQL查询单反斜杠匹配失效,需双反斜杠的原因排查
MySQL查询中单反斜杠无法匹配的原因及解决方法
这不是MySQL字符集设置的问题,核心是转义字符的双重解析机制在起作用:
- 在C#代码里,单反斜杠是转义符。你写的
'B\asd'会被C#解析成B加上**响铃控制字符(\a)**再加上sd,实际发送给MySQL的查询内容根本不是你想要的B\asd,自然匹配不到数据库里的存储值。 - 而
'B\\asd'在C#里会被解析成字面的B\asd,传到MySQL后,MySQL会把这个反斜杠当作普通字符处理(默认SQL模式下),所以能匹配到数据库中的内容。
不需要调整字符集,给你两个实用的解决办法:
使用C#逐字字符串:在字符串前加
@,这样C#不会解析字符串内的转义符,直接把字面内容传给MySQL。示例:@"SELECT * FROM user where username='B\asd';"用参数化查询(强烈推荐):彻底避开手动转义的麻烦,还能防止SQL注入。示例代码:
string query = "SELECT * FROM user WHERE username = @Username;"; using (var cmd = new MySqlCommand(query, yourDbConnection)) { cmd.Parameters.AddWithValue("@Username", "B\\asd"); // 如果是从变量或用户输入获取值,直接传入原字符串即可,参数化会自动处理转义 var reader = cmd.ExecuteReader(); // 处理查询结果... }
另外提一句:MySQL有个NO_BACKSLASH_ESCAPES模式,开启后反斜杠会被当作普通字符,但不建议这么做——它会改变SQL的标准行为,而且首先得解决C#层面的转义问题,根本没必要多此一举。
内容的提问来源于stack exchange,提问作者sreddy
相关产品推荐
相关产品推荐

