Zobrazování českých znaků VB.NET -> MySQL   zodpovězená otázka

VB.NET, SQL, Databáze

Dobrý den,

dělám ve VB.NET projekt, kdy se připojuji k databázi MySQL, zatím na localhostu a tahám data a provádím klasické dotazy (SELECT, INSERT,..). Právě s příkazem INSERT mám problém, konkrétně se správným zobrazováním českých znaků, nejdou mi totiž vložit do databáze, nebo se uloží bez háčků. Zkoušel jsem víc možností, ale bez úspěchu, díky za rady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém bude v nastavení kódování databáze, to se dá nastavit například v MySQL Administratoru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Možná by ti pomohlo v rámci jednoho připojení k DB použít příkaz SET NAMES('kódová stránka klienta') a pak teprve použít INSERT.

V podstatě tím nastavíš kódovou stránku klienta, který přistupuje k DB a o zbytek by se měla postarat sama MySQL.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za odpovědi. Zkoušel jsem obě navrhované varianty, ale někde je zkrátka zádrhel..

Dim command As New MySqlCommand
 command.Connection = conn
 command.CommandText = "SET NAMES 'utf8'"
 command.ExecuteNonQuery()

V kódování UTF8 mám tabulku v databázi, taktéž i porovnání. Když zadám slovo pro vložení, vloží se bez háčků.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě mě napadlo: Co používáte pro připojení vaší aplikace do MySQL? Connector/ODBC nebo Connector/Net, případně něco uplně jiného?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Používám MySQL Connector Net 5.0.9, verze MySQL: 5.1.37 (balík Xampp). Učím se to z anglicky psaných manuálů, takže o této věci není nikde řeč, bohužel..

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jakým způsobem předáváte hodnoty? Jako parametry? Pošlete kód.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

SET NAMES předává mySQL informaci o kódování na straně KLIENTA !!!! Takže určitě pracuješ na win1250 a ne na utf-8 !!!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nebo možná ještě i jinak a lépe :

Dim SQL as string 
SQL = "SET CHARACTER SET cp1250_czech_cs"

Přípona cs -> CaseSensitiv nebo můžeš použít cp1250_czech_ci, což je CaseInsensitive.

Zkoušel jsem to u sebe v "pokusných podmínkách" a pracovalo to bez problémů (DB v UTF-8)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za odpovědi. Bohužel se mi pořád nedaří, vyzkoušel jsem všechny výše napsané možnosti. SQL = "SET CHARACTER SET cp1250_czech_cs" - tak toto mi nebre vůbec a píše, že to nezná. Na ukázku posílám svůj kód (jedná se pouze o "hrátky" s databází, nikoliv vážný projekt, tak to tak prosím berte :)

Dim conn As New MySqlConnection
        Dim myCommand, myCommand2 As New MySqlCommand

        Try
            'Otevření spojení.
            With conn
                .ConnectionString = login
                .Open()
            End With

            'Command pro nastavení kódování.
            With myCommand2
                .Connection = conn
                .CommandText = "SET NAMES cp1250"
                .ExecuteNonQuery()
            End With

            'Command pro insert.
            With myCommand
                .Connection = conn
                .CommandText = "INSERT INTO user (name, surname, date, description)" _
            & "VALUES (?Name, ?Surname, ?Date, ?Description)"
            End With

            'Zadání hodnot parametrů SQL dotazu.
            With myCommand
                .Parameters.AddWithValue("?Name", Me.TextBox6.Text)
                .Parameters.AddWithValue("?Surname", Me.TextBox7.Text)
                .Parameters.AddWithValue("?Date", Now())
                .Parameters.AddWithValue("?Description", Me.TextBox8.Text)
                .ExecuteNonQuery()
            End With

            'Uzavření spojení a refresh formuláře.
            conn.Close()
            LoadDataMySQL()

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě doplním, že kódování tabulky je cp1250, už jsem si to z utf radši předělal.. pro připojení používám MySQL Connector, který přidávám přes reference k projektu..

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém vyřešen.... :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A nechcete nám alespoň napsat, čím to bylo?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ano, omlouvám se, zapomněl jsem.. hledal jsem celé odpoledne na google, a našel jsem toto:

Dim ConnectionString As String = "server=localhost; user id=root; password=root; database=test; charset=utf8"

Jednoduše přidám ke connection stringu charset=utf8, tedy kódování databáze a data se již ukládají s háčky a čárkami. Používám to pro .NET Connnector, nevím, jak je to pro jiná řešení.

Zdravím.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback