将ZERO WIDTH SPACE插入数据库的Unicode问题

时间:2013-08-08 11:09:51

标签: c# mysql nhibernate asp.net-mvc-4 unicode

我正在使用CKEditor,似乎可以使用正确的按键将以下unicode字符插入到textarea中。

  

U + 200B \ xe2 \ x80 \ x8b ZERO WIDTH SPACE

现在,当我尝试将其保存到MySQL数据库时,我收到以下错误: -

MySql.Data.MySqlClient.MySqlException
Incorrect string value: '\xE2\x80\x8B </...' for column 'Content' at row 1

从我所看到的,我有几个选择: -

  1. 更改我的表格中的排序规则,但我不完全确定这会对我使用NHibernate作为ORM的c#MVC4应用程序产生什么影响
  2. 在插入数据库之前从字符串中删除unicode,但是我并不完全是这样做的,即使它是正确的。
  3. 对于某些浏览器来说,这似乎是CKEditor中的一个错误,但是我希望通过不等待修复来证明自己的未来。
  4. 所以我的问题是解决这个问题的最佳选择是什么?

    Table structure

1 个答案:

答案 0 :(得分:0)

显然您的charset是Latin1。

您不应该尝试在Latin1列中存储unicode数据。你可能不得不改变它:

ALTER TABLE campaignemail MODIFY Content LONGTEXT CHARACTER SET utf8

当你这样做时要小心,如果你错误地存储了“unicode-pretending-to-latin1”,这可能会给你的表值带来麻烦。


BTW charset是用于从“字母”(严格来说:代码点)映射到“字节”的编码。

collation定义各种“字母”之间的相对顺序。如果用于搜索/排序列。