# Mysql e Query, Problema Encoding?

**URL:** <https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692>\
**Category:** Italiano\
**Created:** [October 8, 2018, 2:54pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692 "2018-10-08T14:54:23Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Domenico\_Costa](https://forum.xojo.com/user_avatar/forum.xojo.com/domenico_costa/32/3326_2.png) [@Domenico\_Costa](https://forum.xojo.com/u/Domenico_Costa)\
**Post date:** [October 8, 2018, 2:54pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/1 "2018-10-08T14:54:23Z")

</div>

Ciao a tutti,

non so se vi capitato ma devo eseguire una query su MySQL. La medesima query su phpmydqmin funziona da Xojo non funziona.

Premessa:

Il database di tipo: utf8\_general\_ci  
la tabella ha un enconding: utf8\_general\_ci

Nella connessione a DB ho impostato:

```auto
db.SQLExecute("set names utf8")
```

Per eseguire la query ho fatto questo:

```auto
  
  Dim query as String 
  query = "SELECT * FROM atleta WHERE upper(concat(cognome , ' ' , nome)) = '" 
  query = query + Uppercase(nomeCognome.ConvertEncoding(Encodings.UTF8).Trim) + "'"
  
  
  dim connettore as New Connettore
  if connettore.connect then
    
    
    Dim recordSet As RecordSet
    recordSet = connettore.db.SQLSelect(query.ConvertEncoding(Encodings.UTF8))
    
    If connettore.db.Error Then
      MsgBox("DB Error: " + connettore.db.ErrorMessage)
    else 
      
      If recordSet <> Nil Then
        While Not recordSet.EOF
          
          atletaTmp.id = recordSet.Field("id").IntegerValue
          atletaTmp.nome = recordSet.Field("nome").StringValue
          atletaTmp.cognome = recordSet.Field("cognome").StringValue
          recordSet.MoveNext
        Wend
        
        recordSet.Close
      End If

```

Ma non carica il dato.

Premetto la medesima Query con lo stesso parametro in Ingresso funziona sul client di Mysql.

Qualcuno sa aiutarmi?

---

<div class="post-metadata">

**Author:** ![Antonio\_Rinaldi](https://forum.xojo.com/user_avatar/forum.xojo.com/antonio_rinaldi/32/331_2.png) [@Antonio\_Rinaldi](https://forum.xojo.com/u/Antonio_Rinaldi)\
**Post date:** [October 9, 2018, 6:41am UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/2 "2018-10-09T06:41:04Z")

</div>

NomeCognome che encoding ha in origine?

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 9, 2018, 8:23am UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/3 "2018-10-09T08:23:45Z")

</div>

Ciao domenico ho sempre avuto il problema di encoding con MYSQL  
Ho risolto con poche difficolt :

Quando scrivo il record con databaserecord :  
row.column(“codice”) = trim(self.txtcodice.text).UTF8return

[code]Public Function UTF8return(Extends testo As string) as string  
dim risultato as string  
risultato = testo.ConvertEncoding(Encodings.UTF8)  
return risultato

End Function  
[/code]

Quando scrivo il valore nel recordset :  
rsitem.Field(“notedistinta”).UTF8Value = txtnotedistinta.text

```auto
Public Sub UTF8Value(Extends field As DatabaseField, Assigns value As String)
  field.StringValue = value.UTF8return
  
End Sub
```

Quando leggo il valore dal recordset  
txtdeescrizione.Text = rsitem.field(“descrizione”).utfValue

```auto
Public Function utfValue(extends dbf as DatabaseField) as String
  dim s as String=dbf.StringValue
  if s.Encoding=nil then
    Return s.DefineEncoding(Encodings.UTF8)
  else
    Return s
  end if
End Function
```

E poi ovvio, come hai fatto tu, ci metto il comando per impartire a mysql il formato di encoding

```auto
 app.db.SQLExecute("SET NAMES utf8 COLLATE utf8_general_ci; SET CHARACTER SET utf8")
```

Cos funziona, non ho mai avuto problemi.  
Anzi … dico palle, uno ne ho avuto con DynaPDF ma ho risolto…

` // ragione sociale 2
  call pdf.SetFont("Courier", 0, 8, true, pdf.kcpUnicode)
  call pdf.SetTextRect(74,38,160,6)
  call pdf.WriteFText(0,main.dtazienda.supragionesocale)`

Con Postgre e Sqlite questi casini non succedono. E’ proprio un errore di MariaDB e Mysql

---

<div class="post-metadata">

**Author:** ![Domenico\_Costa](https://forum.xojo.com/user_avatar/forum.xojo.com/domenico_costa/32/3326_2.png) [@Domenico\_Costa](https://forum.xojo.com/u/Domenico_Costa)\
**Post date:** [October 11, 2018, 12:19pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/4 "2018-10-11T12:19:02Z")

</div>

Ciao @Antonio Rinaldi

il sorgente di quel dato un file CSV

Grazie mille @Massimiliano Chiodi provo a fare come mi hai detto.

Si un po noiosa questa faccenda del MySql 😃  
sto pensando di migrare al postgres 😉

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 11, 2018, 12:50pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/5 "2018-10-11T12:50:50Z")

</div>

Dipende Domenico… Postgree mi sembre lento.  
Fai conto che ho elaborato 1200 ddt di 3 pagine per emettere le fatture…  
con Postgree il mac si addormenta… certo, ovvio, non era installato su di un server veloce.  
Allo stesso modo per mysql scattante, per non gratis.

---

<div class="post-metadata">

**Author:** ![Antonio\_Rinaldi](https://forum.xojo.com/user_avatar/forum.xojo.com/antonio_rinaldi/32/331_2.png) [@Antonio\_Rinaldi](https://forum.xojo.com/u/Antonio_Rinaldi)\
**Post date:** [October 11, 2018, 1:57pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/6 "2018-10-11T13:57:01Z")

</div>

Prova ad impostare l’encoding nella lettura del file non a livello dei singoli elementi (tipo leggi la riga con l’encoding giusto e poi la dividi nei componenti)  
A quel punto dovrebbe funzionare senza troppi problemi.

Quanto al problema di mySql con utf8, questo deriva dal fatto che per gli americani il fatto che non ha encoding la stringa letta non un problema (per la maggior parte delle volte).  
Alla conferenza di Monaco ho sottolineato che questo per gli europei non vero in quanto per forza usiamo ormai utf-8.  
Ho proposto quindi di rendere ufficiali le varie UTF8Value in modo da semplificare il nostro lavoro. Vedremo.

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 11, 2018, 6:04pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/7 "2018-10-11T18:04:23Z")

</div>

Quando due/tre anni fa Antonio ti avevo parlato del problema mi avevi assicurato che nel suo interno, se diversamente specificato, era tutto UTF8 e sono andato avanti mesi con i problemi di lettura / scrittura su mysql … Poi mi hai aiutato dopo qualche mese a scrivere UTF8Value indicandomi che non dovevo usare ‘string’ ma ‘field’ o qualcosa di simile per farlo funzionare come extension. Adesso per me normale utilizzare queste istruzioni, che tra l’altro utilizzo anche su Postgre e su Sqlite senza che diano fastidio.  
L’avvento di una integrazione ufficiale mi fa solo che piacere. Grazie Antonio !

---

<div class="post-metadata">

**Author:** ![Domenico\_Costa](https://forum.xojo.com/user_avatar/forum.xojo.com/domenico_costa/32/3326_2.png) [@Domenico\_Costa](https://forum.xojo.com/u/Domenico_Costa)\
**Post date:** [October 12, 2018, 6:36am UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/8 "2018-10-12T06:36:46Z")

</div>

Oggi faccio una prova con la vostra soluzione (Massimiliano + Antonio).  
Ammetto che fastidioso anche perch poi ti sembra di aver fatto le cose corrette ma manca sempre un qualcosa.  
Probabile che la lettura del CSV causa questo incoveniente.

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 12, 2018, 7:21am UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/9 "2018-10-12T07:21:48Z")

</div>

Stai attento a non aprire il file CSV con encoding utf8 altrimenti diventi matto 🙂  
Se i dati arrivano da IBM AS400 hai una codifica EBCDIC convertilo prima in ascii  
Guarda qui : [](https://www.utf8-chartable.de/unicode-utf8-table.pl) c’ la tabella dei caratteri unicode;  
Avrai problemi con accenti e virgole, e sicuramente anche con gli apostrofi

---

<div class="post-metadata">

**Author:** ![Domenico\_Costa](https://forum.xojo.com/user_avatar/forum.xojo.com/domenico_costa/32/3326_2.png) [@Domenico\_Costa](https://forum.xojo.com/u/Domenico_Costa)\
**Post date:** [October 14, 2018, 11:39am UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/10 "2018-10-14T11:39:11Z")

</div>

Niente, non funziona.

Quando arrivo a leggere quella Query non restituisce niente. Sel a eseguo su phpMyAdmin funziona.

Penso che il problema sia quando leggo la riga dal CSV e la divido per estarre il dato che mi serve:

```auto
          Dim nomeAtletaCasa as String
          nomeAtletaCasa= rigaIncontro(i).Trim
          
          Dim pos as Integer
          pos = nomeAtletaCasa.InStr("nato a") - 1
          
          nomeAtletaCasa = nomeAtletaCasa.Mid(0, pos).DefineEncoding(Encodings.UTF8)
```

La Stringa nomeAtletaCasa il prbolema. Se non eseguo il MID tutto funziona. Ma quello mi serve.  
Ho inserito il DefineEncoding ma niente da fare.  
Ho utilizzato la funzione ConvertEncoding ma niente da fare.

Scoraggiato! haha

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 14, 2018, 11:48am UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/11 "2018-10-14T11:48:01Z")

</div>

Domenico …  
leggi tutta la riga…  
tutta tutta  
poi puoi usare  
campo1 = nthfield(nomevariabileriga,“delimitatore”,numerodelcampo)  
esempio campo1 = nthfield(nomevariabileriga,";",numerodelcampo)

poi pulisci le varie schifezze, ad esempio gli apici, gli spazi  
usa campo1 = replaceall(campo1,chr(34),"") per sostituire gli apici  
campo1 = replaceall(campo1,"’","") per sostituire il singolo apice … etc

quindi … usa nthfield per leggere una stringa con i dati separati da quello che vuoi

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 14, 2018, 11:55am UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/12 "2018-10-14T11:55:43Z")

</div>

oppure usa split(nomevariabile,“delimitatore”) e infili tutto in un array…  
la stessa cosa …  
con il csv io ho visto diversi formati;  
il delimitatore di campo , virgola o ; dipende quanto era ubriaco il programmatore quando ha letto il manuale;  
il qualificatore di campo, di solito " doppio apice per le stringhe, oppure singolo apice, oppure anche senza; dipende sempre da quanto stato in osteria il programmatore.  
la convenzione SAAA IBM riporta che CSV ( comma separated value ) deve avere delimitatore comma, quindi la virgola e il testo deve essere qualificato con gli apici, ma come ti ho scritto sempre un discorso di vecchia osteria  
usa nthfield per usare i singoli campi.  
se non conosci quanti campi sono, conta il numero di volte che il delimitatore c’ nella striga == INSTR (inizio, carattere da cercare) ti dice quante volte il carattere da cercare presente nella stringa.  
il csv ha sempre nel suo interno un delimitatore.  
anche il file separato con altro delimitatore, che alla fine non pi un CSV usa ad esempio il TAB  
comunque o con SPLIT o con NTHFIELD riesci a fare lo stesso

Magari non sembra… ma anche io sono appena tornato dall’osteria…

---

<div class="post-metadata">

**Author:** ![Domenico\_Costa](https://forum.xojo.com/user_avatar/forum.xojo.com/domenico_costa/32/3326_2.png) [@Domenico\_Costa](https://forum.xojo.com/u/Domenico_Costa)\
**Post date:** [October 14, 2018, 12:49pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/13 "2018-10-14T12:49:53Z")

</div>

Provato, ma niente. La query non restituisce niente come sempre.

Grazie dell’aiuto. Cercher una soluzione “alternativa”

---

<div class="post-metadata">

**Author:** ![Domenico\_Costa](https://forum.xojo.com/user_avatar/forum.xojo.com/domenico_costa/32/3326_2.png) [@Domenico\_Costa](https://forum.xojo.com/u/Domenico_Costa)\
**Post date:** [October 14, 2018, 3:19pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/14 "2018-10-14T15:19:22Z")

</div>

Ho provato in tutti i modi, solo se cablo il dato nella query funziona.

Ora ho provato a convertire in codice ASCII ogni singolo carattere della stringa estratta dal CSV. Per poi riconvertirlo in Stringa partendo dal codice Ascii.

```auto
          dim ricerca as String
          dim y as Integer
          for y = 0 to datoFromCSV.Len
            Dim codAscii As Integer
            codAscii = Asc(Lowercase(datoFromCSV.Mid(y, 1))) 
            if codAscii > 0 then
              ricerca = "" + ricerca + Chr(codAscii)
            end if
          next
```

Ma anche cosi, dopo che inserisco il risultato nella query … non funziona.

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 14, 2018, 3:47pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/15 "2018-10-14T15:47:49Z")

</div>

ma che cappero di formato ?  
non che hanno installato il server mysql con la codifica di default e ci scrivono in utf8 ? perch allora otterrai solo capperi e fagioli

---

<div class="post-metadata">

**Author:** ![Domenico\_Costa](https://forum.xojo.com/user_avatar/forum.xojo.com/domenico_costa/32/3326_2.png) [@Domenico\_Costa](https://forum.xojo.com/u/Domenico_Costa)\
**Post date:** [October 14, 2018, 3:52pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/16 "2018-10-14T15:52:26Z")

</div>

So solo che il formato del MySQL sul server utf8\_general\_ci   
La cosa curiosa e che su altre tabelle riesco a leggere con i dati letti da un altro CSV.

Dici che i dati sono stati inseriti non in UTF8?

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 14, 2018, 5:48pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/17 "2018-10-14T17:48:03Z")

</div>

Hai per caso un’altra spiegazione ?

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 14, 2018, 5:48pm UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/18 "2018-10-14T17:48:44Z")

</div>

Hai provato ad aprile il file con un HEX EDITOR per capire come codificato ?

---

<div class="post-metadata">

**Author:** ![Antonio\_Rinaldi](https://forum.xojo.com/user_avatar/forum.xojo.com/antonio_rinaldi/32/331_2.png) [@Antonio\_Rinaldi](https://forum.xojo.com/u/Antonio_Rinaldi)\
**Post date:** [October 15, 2018, 6:36am UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/19 "2018-10-15T06:36:24Z")

</div>

io controllerei quel nomeAtletaCasa.Mid(0, pos)

dovresti partire da 1 con string

---

<div class="post-metadata">

**Author:** ![Massimiliano\_Chiodi](https://forum.xojo.com/letter_avatar_proxy/v4/letter/m/b782af/32.png) [@Massimiliano\_Chiodi](https://forum.xojo.com/u/Massimiliano_Chiodi)\
**Post date:** [October 15, 2018, 8:22am UTC](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692/20 "2018-10-15T08:22:56Z")

</div>

Dim query as String  
query = “SELECT \* FROM atleta WHERE upper(concat(cognome , ’ ’ , nome)) = '”  
query = query + Uppercase(nomeCognome.Trim) + “’”

dim connettore as New Connettore  
if connettore.connect then

```
Dim recordSet As RecordSet
recordSet = connettore.db.SQLSelect(query)

If connettore.db.Error Then
  MsgBox("DB Error: " + connettore.db.ErrorMessage)
else 
  
  If recordSet <> Nil Then
    While Not recordSet.EOF
      
      atletaTmp.id = recordSet.Field("id").IntegerValue
      atletaTmp.nome = recordSet.Field("nome").StringValue
      atletaTmp.cognome = recordSet.Field("cognome").StringValue
      recordSet.MoveNext
    Wend
    
    recordSet.Close
  End If
```

[Next page](https://forum.xojo.com/t/mysql-e-query-problema-encoding/45692.md?page=2)
