【发布时间】:2012-06-24 22:11:50
【问题描述】:
我有一张表需要处理各种字符。字符包括Ø、®等。
我已将表设置为 utf-8 作为默认排序规则,所有列都使用表默认值,但是当我尝试插入这些字符时出现错误:字符串值不正确:'\xEF\xBF\xBD' for column '第 1 行的买家姓名'
我的连接字符串定义为
string mySqlConn = "server="+server+";user="+username+";database="+database+";port="+port+";password="+password+";charset=utf8;";
我不知道为什么我仍然看到错误。我是否错过了 .net 连接器或我的 MySQL 设置的任何内容?
--编辑--
我的(新的)C# 插入语句如下所示:
MySqlCommand insert = new MySqlCommand( "INSERT INTO fulfilled_Shipments_Data " +
"(amazonOrderId,merchantOrderId,shipmentId,shipmentItemId,"+
"amazonOrderItemId,merchantOrderItemId,purchaseDate,"+ ...
VALUES (@amazonOrderId,@merchantOrderId,@shipmentId,@shipmentItemId,"+
"@amazonOrderItemId,@merchantOrderItemId,@purchaseDate,"+
"paymentsDate,shipmentDate,reportingDate,buyerEmail,buyerName,"+ ...
insert.Parameters.AddWithValue("@amazonorderId",lines[0]);
insert.Parameters.AddWithValue("@merchantOrderId",lines[1]);
insert.Parameters.AddWithValue("@shipmentId",lines[2]);
insert.Parameters.AddWithValue("@shipmentItemId",lines[3]);
insert.Parameters.AddWithValue("@amazonOrderItemId",lines[4]);
insert.Parameters.AddWithValue("@merchantOrderItemId",lines[5]);
insert.Parameters.AddWithValue("@purchaseDate",lines[6]);
insert.Parameters.AddWithValue("@paymentsDate",lines[7]);
insert.ExecuteNonQuery();
假设这是使用参数化语句的正确方法,它仍然报错
"Incorrect string value: '\xEF\xBF\xBD' for column 'buyerName' at row 1"
还有其他想法吗?
【问题讨论】:
-
如果您发布用于插入表格的 C# 代码可能会有所帮助。
-
这三个字符看起来几乎像UTF-8 byte order mark (BOM)。
-
添加了插入语句,不确定它有多大帮助,因为它是一个标准的插入语句,但如果它有帮助......
-
@stakx 似乎它可能是一个 BOM,来自en.wikibooks.org/wiki/Perl_Programming/Unicode_UTF-8 perl 编程维基书:“(U+FFFD 在 UTF-8 中编码为 EF BF BD。”,为什么 BOM 不是如果所有内容都已以 utf8 编码,则可以正确识别?
-
hmm 有趣的是来自 MySQL 5.5 参考手册:“mysql 在输入文件的开头忽略 Unicode 字节顺序标记 (BOM) 字符。以前,它读取它们并将它们发送到服务器,导致语法错误。BOM 的存在不会导致 mysql 更改其默认字符集。为此,请使用诸如 --default-character-set=utf8 之类的选项调用 mysql。”。使用 charset=utf8 设置我的连接字符串会完成此操作吗?还是 --default-character-set 执行不同的操作?