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,但这给了我同一行的错误。
不确定这对您的特定错误意味着什么,但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");