Insert do MySQL, zjadanie polskich ogonków

0

Pobieram dane z Access i ładuje je do MySQL w C# .NET

Robię to albo tak (sqlCommand to string generowany przez kod, dane prosto z Access pobrane przez zapytanie):

string sqlCommand = "INSERT INTO cos VALUES ('zażółć gęślą jaźń')";
MySQLCommand.CommandText = sqlCommand;
MySQLCommand.ExecuteNonQuery();

albo tak:

string sqlCommand = "INSERT INTO cos VALUES ('zażółć gęślą jaźń')";
byte[] znaki = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("windows-1250"), Encoding.UTF8.GetBytes(sqlCommand));
MySQLCommand.CommandText = Encoding.GetEncoding("windows-1250").GetString(znaki);

Rezultat ten sam - obcina ogonki, ł->l, ń->n etc. Tylko 'ó' zostaje. Kodowanie MySQL to CP1250 (tak mam narzucone z pewnych względów). Jak to naprawić?
Wysyłanie "SET NAMES cp1250" na początku sesji nic nie zmienia.

0

jesli to nie jest problem Locale ustawionego na bazie danych i na tablicach (co sie robi raz i tylko raz opdczas zakladania tablic, potem juz nie mozna zmienic o ile dobrze pamietam) to nie wyobrazam sobie co by moglo je obcinac.. poza tym zamiast konstruowac stringa z poleceniem - sprobuj uzyc SqlParameters, byc moze to jakos 'inteligętnie' sie dostosuje do locale'ow

SqlCommand cmd = new SqlCommand("INSERT INTO cos VALUES(@param)");
cmd.Parameters.Add('@param',"zażółć.."); //wysyla jako unicode, moze silnik sobie przerobi na wlasciwe locale zgodne z locale tablicy
ew.
byte[] znaki = ..;
cmd.Parameters.Add('@param',Encoding...(znaki)); //recznie, jak w/w spali

0

Niewiele wiem na ten temat, ale może spróbuj załadować dane do bazy przez ADO.NET (OleDb...) zamiast specjalnych klas do MySQL.

Może to coś da, choć wątpie.

0

Po przerwie wracam.

Rozwiązanie quetzalcoatl jest w moim przypadku ciężkie do wykonania, gdyż "inserty" generuje jedna funkcja, a na ich podstawie inna funkcja robi z nich SqlCommand i je uruchamia.

Deti - nie próbowałem jeszcze, gdyż to by wymagało sporych przeróbek programu, ale jakoś mi się nie wydaje, bo to był problem providera - inaczej nie dałoby się dodać żadnych danych binarnych, a to raczej twórcy providera musieli przewidzieć.

[edited]
heh.. poszperałem nieco i .. na Jowisza - znalazłem właśnie :D
Wystarczyło do ConnectionString dodać parametr Charset, czyli:
Data Source=localhost;Database=baza;User Id=user;Password=haslo;Charset=cp1250

Dziwne, że wysłanie SET NAMES tego nie załatwiło. No nic, problem rozwiązany :)

0

dobrze wiedziec.. swoja droga takie 'ukryte' opcje sa swietne.. wez takie cos znajdz potem :}

0

Najlepsze jest to, że odpowiedź znalazłem grzebiąc na google, które dla zapytania zwróciło mi tylko dwie strony - w tym jedna to była ta - moje pytanie na 4p :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1