Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#ODBC异常字符串值不正确_C#_Mysql_.net_Database_Character Encoding - Fatal编程技术网

C#ODBC异常字符串值不正确

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,

我使用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,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" )