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

本文关键字:字符串 不正确 ODBC 异常 | 更新日期: 2023-09-27 17:55:50

我正在使用C#来解析聊天日志并将消息插入数据库。

尝试插入字符串时"Don't worry, it's unloaded"(带双引号)它给了我以下例外:

System.Data.Odbc.OdbcException: ERROR [HY000] [MySQL][ODBC 5.1 Driver][mysqld-5.5.11]Incorrect string value: ''xEF'xBB'xBF it...' for column 'msg' at row 1 at void System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)

数据库对编码方案使用 latin-1 默认排序规则。

尝试切换到 utf-8,但这给了我同一行的错误。

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

不确定这对您的特定错误意味着什么,但EF BB BF是可能导致问题的 UTF BOM 字符。

此答案指出客户端连接也需要设置为正确的字符集。可能是 C# 客户端字符与 MySQL 编码不匹配。

根据您选择的插入数据的方式(我假设通过直接构建 SQL),需要转义'字符。这是因为'在大多数数据库中都是字符串分隔字符。

您需要插入的是 "Don''t worry, it''s unloaded" ,单引号通过加倍来转义。

!重要提示:您需要小心使用原始 SQL,因为它很容易创建可以 SQL 注入的安全漏洞。尽可能使用参数化查询,或完全转义发送到服务器的查询。

不要忘记,如果你正在构造 SQL 语句(不要!——改用参数化查询),如果构造最终看起来像:

insert foo ( bar ) values( "This is my data" )

插入将失败,因为双引号引入了带引号的列名。它与用撇号 (' ) 引用的字符串文字不同。

用户 SQL 参数,而不是使用原始 sql。可能存在SQL注入安全问题和此类问题。

了解如何使用 sql 参数 mysql-c#

例如:

MySqlCommand mySqlCommand1;
...
mySqlCommand1.CommandText = "INSERT INTO dept (deptno, dname, desc) VALUES (?, ?, ?)";
mySqlCommand1.Parameters.Add("param1", 30);
mySqlCommand1.Parameters.Add("param2", "SALES");
mySqlCommand1.Parameters.Add("param3", @"Don''t worry, it''s unloaded");