【发布时间】:2016-02-17 20:43:19
【问题描述】:
我在将字符串写入包含 utf-8 字符的 mysql 数据库时遇到问题。角色之前的所有内容都被写入表格,但角色和之后的所有内容都不存在。
我检查了数据库的字符集,默认排序规则是utf8_general_ci,默认字符集是utf8。写入的列是 longtext 类型,排序规则为 utf8_general_ci。
我也尝试将SET NAMES utf8; 添加到查询中,但这并没有改变结果。
下面是正在运行的代码示例:
using (var cmd = new MySqlCommand("insert into tablename (BodyText) values (@p1)", connection as MySqlConnection) { CommandType = CommandType.Text })
{
cmd.Parameters.Add("@p1", BodyText);
cmd.ExecuteNonQuery();
}
连接字符串是:
"SERVER=xx;DATABASE=xx;USER=xx;PASSWORD=xx;Pooling=true;Validate Connection=true;CHARSET=UTF8"
尝试写入表格的文本是“谢谢!我看到它是另外 2 个 ???? 文本...”,以及写入表格的内容是“谢谢!我看到它是 2 ”。
我们将不胜感激。
更新:经过进一步研究,问题似乎是 MySql 中的基本 utf8 编码不支持 4 字节字符(其中 ???? 是)。对此的解决方案是更新 MySql 数据库以使用 utf8mb4 或在写入表之前从字符串中删除字符。第二种解决方案的问题是在大型代码库上,必须在将文本写入数据库的任何地方进行此检查。欢迎任何有关如何处理此问题的建议。
【问题讨论】:
标签: c# mysql database encoding utf-8