Резервная копия базы с помощью mysqldump. Помогите победить кодировку.

Gamber
Дата: 18.04.2014 11:20:36
Доброго времени.
Необходимо реализовать резервное копирование БД в приложении.
Проблема в том, что при задействовании утилиты 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;
        }
buser
Дата: 18.04.2014 12:12:13
Адов... А разве тула сама не умеет сразу в файл писать?
P.S.: http://stackoverflow.com/a/7651522