У меня возникла проблема с записью строки в базу данных mysql, содержащую символ utf-8. Все до того, как персонаж будет записан в таблицу, но персонаж и все, что его там не будет.C# MySql Not Writing utf-8 Characters
Я проверил набор символов базы данных, а значение по умолчанию - 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».
Любая помощь по этому вопросу будет оценена по достоинству.
Обновление: после дальнейших исследований проблема заключается в том, что базовая кодировка utf8 в MySql не поддерживает 4-байтные символы (из которых). Решения для этого - либо обновить базу данных MySql, чтобы использовать utf8mb4, либо удалить символы из строки перед записью в таблицу. Проблема со вторым решением заключается в большой базе кода, которую эта проверка должна быть выполнена везде, где текст записывается в базу данных. Любые предложения о том, как справиться с этой проблемой, приветствуются.