C#ODBC异常字符串值不正确
我使用C#解析聊天日志并将消息插入数据库 尝试插入字符串时,“别担心,它已卸载” (带双引号)它给了我以下例外:C#ODBC异常字符串值不正确,c#,mysql,.net,database,character-encoding,C#,Mysql,.net,Database,Character Encoding,我使用C#解析聊天日志并将消息插入数据库 尝试插入字符串时,“别担心,它已卸载” (带双引号)它给了我以下例外: System.Data.Odbc.OdbcException:ERROR[HY000][MySQL][Odbc 5.1 Driver][mysqld-5.5.11]不正确的字符串值:“\xEF\xBB\xBF it…”用于第1行的“msg”列 位于void System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle,
System.Data.Odbc.OdbcException:ERROR[HY000][MySQL][Odbc 5.1 Driver][mysqld-5.5.11]不正确的字符串值:“\xEF\xBB\xBF it…”用于第1行的“msg”列
位于void System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle,RetCode RetCode)
数据库正在为编码方案使用latin-1默认排序规则
我已尝试切换到utf-8,但这在同一行中给了我错误。根据您选择的插入数据的方式(我假设通过直接构建SQL),需要转义
“
字符。这是因为在大多数数据库中,是字符串定界字符
您需要插入的是“别担心,它已卸载”
,单引号通过加倍转义
!重要提示:使用原始SQL时,您需要小心使用原始SQL,因为它可以很容易地创建安全漏洞,从而导致安全漏洞。尽可能使用参数化查询或完全转义发送到服务器的查询。用户SQL参数,而不是使用原始SQL。可能存在SQL注入安全性问题以及此类问题 请参见如何使用sql参数 例如:
不确定这对您的特定错误意味着什么,但
EF BB BF
是可能导致问题的UTF字符
这指出客户端连接也需要设置为适当的字符集。可能是C#client字符与MySQL编码不匹配。不要忘记,如果您正在构造SQL语句(不要!--使用参数化查询),如果构造结果如下所示:
insert foo ( bar ) values( "This is my data" )
插入将失败,因为双引号引入了带引号的列名。它与用撇号(
“
)引用的字符串文字不同。我们可以看到用于插入字符串的代码吗?警告:如果动态创建查询,不仅需要转义撇号,还需要转义反斜杠。用双反斜杠替换反斜杠,然后用反斜杠和撇号替换撇号。com.Parameters.AddWithValue(“msg”,message.msg)代码>我正在使用参数查询。上面是我将消息添加到insert查询的行。我看了实际文本,发现句子中有一个模糊的字符。它在我的操作系统中无法识别,只是显示为一个方框。有没有办法轻松过滤掉这些字符?或者将它们以原始形式作为无法识别的字符插入?正如@Paul DelRe所说,您看到的是BOM表。理解这一点也很重要,因为某些东西看起来像记事本中的文本并不意味着它就是。
insert foo ( bar ) values( "This is my data" )