Доброго времени.
Необходимо реализовать резервное копирование БД в приложении.
Проблема в том, что при задействовании утилиты mysqldump из приложения, кодировка русскоязычных символов превращается в абракадабру. Если запустить утилиту напрямую из командной строки, проблем с кодировкой нет.
Все кодировки выставляются в UTF-8. Что я все-так упускаю? Подскажите пожалуйста.
Подключение к базе:
string connection_string = "server=" + db_server + ";" + "userid=" + db_user + ";" + "password=" + db_pass + ";" + "database=" + db_name + ";charset=utf8";
Создание фйла в который будут записываться данные для последующего LOAD DATA
FileStream output_file = new FileStream(output_file_location + "output.csv", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter output_stream = new StreamWriter(output_file, Encoding.UTF8);
LOAD DATA в базу
"LOAD DATA INFILE " + "'" + csvimport_file_location + "output.csv" + "'" + " REPLACE INTO TABLE " + db_main_tablename + " FIELDS TERMINATED BY ','" + " ENCLOSED BY '" + encolsed_symbool + "'" + " LINES TERMINATED BY ';'";
Резеврное копирование базы
static bool BackupMysql(string server, string db, string login, string pass)
{
FileStream fs = new FileStream(@"c:\backup.sql", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs,Encoding.UTF8);
string output;
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "mysqldump.exe";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.Arguments = string.Format(@"-u{0} {1} -h{2} --default-character-set={3} {4}",
login,
string.IsNullOrEmpty(pass) ? "" : "-p" + pass,
server,
"utf8",
db);
psi.UseShellExecute = false;
Process pr = Process.Start(psi);
try
{
output = pr.StandardOutput.ReadToEnd();
sw.WriteLine(output);
pr.WaitForExit();
}
catch (Exception e)
{
return false;
}
finally
{
sw.Close();
pr.Close();
}
return true;
}