Get Trash Instead Umlaut letter from DB.

Discussion of open issues, suggestions and bugs regarding ADO.NET provider for MySQL
Post Reply
Sergii
Posts: 4
Joined: Wed 14 Mar 2012 16:24

Get Trash Instead Umlaut letter from DB.

Post by Sergii » Wed 14 Mar 2012 16:34

Hello. I have DB with umlaut letters. Db is MySQL 3.23.45. Default charset is latin1. When I get data using Devart dotConnect. I get trash instead umlaut letter.

What I should change to get valid letters?

I was trying to change charset in connection string to latin1. It is not help, I get exception "Client character set 'utf8' is different from server character set 'latin1'.".

If change to utf8 It gets exception. I was trying set Unicode=true in connection string and in connection object in code. But I get exception like "Client character set 'utf8' is different from server character set 'latin1'."

How to read umlaut letter?

P.S. Server Explorer in VS2010 not read umlaut letters too when I use dotConnect.

Shalex
Site Admin
Posts: 9543
Joined: Thu 14 Aug 2008 12:44

Post by Shalex » Thu 15 Mar 2012 10:48

Synchronization of client and server encoding could be made by setting the Charset property of the MySqlConnection object (or the Character Set option in the connection string) to 'auto'. In this case, the server asks for the charset and sets the appropriate charset on the client. Does it help?

Sergii
Posts: 4
Joined: Wed 14 Mar 2012 16:24

Post by Sergii » Thu 15 Mar 2012 12:48

At this moment I should say I have two DB on that server.
The first has Client CharacterSet = default.
The second Client CharacterSet = utf8;

I put Character Set = auto to each connection string.
Now I get valid data from first DB.

From second DB I still get trash.

Sergii
Posts: 4
Joined: Wed 14 Mar 2012 16:24

Post by Sergii » Thu 15 Mar 2012 13:16

I think I know how to fix problem with second DB. It is my DB. And I will recreate it with default charset then I will copy from second DB to this one new.

Shalex
Site Admin
Posts: 9543
Joined: Thu 14 Aug 2008 12:44

Post by Shalex » Thu 15 Mar 2012 15:57

Sergii wrote:I think I know how to fix problem with second DB. It is my DB. And I will recreate it with default charset then I will copy from second DB to this one new.
We think that this will solve the issue.

Sergii
Posts: 4
Joined: Wed 14 Mar 2012 16:24

Post by Sergii » Fri 16 Mar 2012 11:55

Thank you for Help. The problem solved.

Denker
Posts: 6
Joined: Thu 19 Jan 2012 10:32

special german chars umlaut

Post by Denker » Tue 03 Apr 2012 18:17

Hello,

i try this
http://www.devart.com/forums/viewtopic.php?t=23624
but it doesn`t help with mysqldump or mysqlscript.

I use mysqldump to backup a file in the file all characters ok. I can connect to the same server and try to restore and the letters are not ok.

Mysqlloader have no problem.

I use Mysql Server Version 4.0.24.

Thank you for help

Pinturiccio
Devart Team
Posts: 2420
Joined: Wed 02 Nov 2011 09:44

Post by Pinturiccio » Wed 04 Apr 2012 13:42

Please make sure that you use the ConnectionString parameter with 'Unicode=true' for the connection you use for Dump.Restore();

Could you please specify the character_set and character_sets values by executing the SQL query 'show variables like 'char%'?

Denker
Posts: 6
Joined: Thu 19 Jan 2012 10:32

Post by Denker » Wed 04 Apr 2012 15:11

Hi,

show variables like 'char%'
charset latin1
charsets latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5

if i try unicode = true i got an exception, charset differs from the server, set charset to latin1.

thanks
Denker

Pinturiccio
Devart Team
Posts: 2420
Joined: Wed 02 Nov 2011 09:44

Post by Pinturiccio » Thu 05 Apr 2012 13:18

Could you please specify the following:
1. Your system default charset (it can be found with the help of the toolbar -> Region and Language on the Administrative tab. The language is specified on this tab in the Current language for non-Unicode programs section);
2. Both of your connection strings (roughly, without credentials) for backup and restore;
3. The snippet of code where you perform backing up;
4. The snippet of code where you perform restoring. Do you use the name of a file or a Stream object?

If you perform the backup and restoring with one connection in the same application do you have "all characters ok" in the file and "the letters are not ok" in the database after restoring?

Denker
Posts: 6
Joined: Thu 19 Jan 2012 10:32

Post by Denker » Mon 09 Apr 2012 10:10

sry that was my fault, i used streamreader and streamwriter to edit the File, and there was my fault, that the streamreader and streamwriter used a wrong encoding text. now it`s all ok.

I edit the file, so i can replace or ignore duplicate id, and now it`s ok.

Thank you

Code: Select all

Public Function tabellensync(ByVal table As String, Optional ByVal whereklausel As String = "", Optional ByVal auswahl As String = "*", Optional ByVal ignore As String = " IGNORE ") As Boolean
        Dim sr As System.IO.StreamReader
        Dim sw As System.IO.StreamWriter
        Dim neu As String
        Dim datei As String
        datei = "C:\ticket_sync\" & table & Now.Ticks & ".sql"
        tabellensync = True
        dumpsave.IncludeDrop = True
        dumpsave.GenerateHeader = True
        dumpsave.Connection = conentfernt
        dumpsave.UseExtSyntax = True
        dumpsave.QuoteIdentifier = True
        dumpsave.BackupQuery("select " & auswahl & " from " & table & " " & whereklausel, datei)
        sr = New System.IO.StreamReader(datei)
        neu = sr.ReadToEnd
        sr.Close()
'with ignore i ignore duplicate id`s and with the second i Replace duplicate
then is ignore = " REPLACE " 
        If ignore = " IGNORE " Then
            neu = Replace(neu, "INSERT INTO", "INSERT " & ignore & " INTO")
        Else
            neu = Replace(neu, "INSERT INTO", ignore & " INTO")
        End If

        sw = New System.IO.StreamWriter(datei)
        sw.Write(neu)
        sw.Close()
        conlokal.open()
 AddHandler dumpeinspiel.[Error], New Devart.Common.ScriptErrorEventHandler(AddressOf dump_error)
        dumpeinspiel.Connection = conlokal
        dumpeinspiel.Restore(datei)
        My.Computer.FileSystem.DeleteFile(datei)
        Return 1
    End Function

Post Reply