query sql in linguaggio (non codifica) ANSI [US-ASCII] | SQL & MySQL

Topic: Pubblico - Composto da 6 Posts di 2 Utenti.

14 Dicembre, 2011 15:17 #1
darbula
Utente

darbula
Registrato: Dec, 2011
Posts: 4
Offline

Salve essendo il mio primo post ne approfitto per porre un saluto a tutta la community.

Diversi database hanno in comune le query sql (ogni database ha le sue varianti di query) ciò che li rende simili tra loro è il linguaggio ANSI, usato per tutte le query.

Volevo chiedervi se mi mostrate la via corretta se avete tempo da disporre per la mia causa.

Il default di mysql è Latin1 (ISO-8859-1). Che può essere cambiato con il comando CHARCTER SET 'utf8' oppure con SET NAMES 'utf8' (pratica che sconsiglia pure mysql), il secondo comando rispetto al primo imposta in più pure la connessione è il web server a UTF-8.

A voi con il secondo comando dopo averlo eseguito vi effettua le nuove query immesse dall'applicazione web?

Ultima modifica 14 Dicembre, 2011 15:23 di darbula

14 Dicembre, 2011 19:58 #2
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

Ciao Darbula e benvenuto.
Non credo che cambiare il charset al webserver possa influire in qualche modo le query dell'applicazione web. Potresti provare a spiegarci un pò più dettagliatamente il problema che stai riscontrando? :)

Saluti :)


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

14 Dicembre, 2011 22:12 #3
darbula
Utente

darbula
Registrato: Dec, 2011
Posts: 4
Offline

Grazie accetto calorosamente il suo benvenuto :)
Anche conoscendo alcuni comandi non ho la facoltà di usarli con un cellulare preistorico LG U8330, detto ciò spero che questa domanda sia vista come utilità di risoluzione dello stesso problema per altri utenti.

Siccome l'informatica in generale mi affascina cerco di capire cosa c'è attorno, girovagando in internet ho trovato qualche post che descrive che con il comando SET NAMES 'utf8' alcuni utenti non riescono più ad eseguire query dall'applicativo web.

Se questo problema fosse legato al browser in uso nel pc?
Mi spiego meglio supponiamo che abbia impostato mysql con il comando precedente in UTF-8 è utilizzi l'applicativo web con browser ISO-8859-1 (sbadatamente ne sono ignaro) cosa succede con i caratteri?
La mia ipotesi è che porti conflitti in alcuni caratteri ad esempio la percentuale è l'apostrofo, nella tabella US-ASCII È ISO-8859-1 gli esadecimali sono 25 e 27 mentre in UTF-8 sono 37 39 (non è che il browser ISO-8859-1 invia questo al posto della percentuale e dell'apostrofo UTF-8).
Ps. Frequento un forum SMF in UTF-8 dove con browser ISO-8859-1 i caratteri descritti li visualizzo come rombi con un punto interrogativo al centro (in UTF-8 visualizzo tutto correttamente).

Ultima modifica 14 Dicembre, 2011 22:47 di darbula

15 Dicembre, 2011 09:57 #4
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

...ma diamoci del tu :)

Guarda, ho avuto il problema dei caratteri accentati in molti contesti, java(servlet/jsp) e applicazioni php.

La comunicazione tra webapp e database avviene ovviamente tra webserver e dbms, per cui potremmo escludere che la codifica del client possa influire in qualche modo.

Sicuramente, se la codifica dell'output non viene eseguita correttamente oppure se negli header della pagina non viene specificato bene di che tipo di output stiamo parlando, è probabile che il browser la interpreti a modo suo rischiando di interpretare male.

Come ho risolto il problema? Quando si tratta mandare dati al db, bisogna codificarli affinché questi dati siano coerenti al charset del db che li ospita. Quando invece vengono presi per essere mandati in output su una pagina web o qualsiasi altro output, ovviamente ci sarà sempre un punto in cui si deve dire "si tratta di UTF-8 oppure, latin-1, ecc..." e decodificare i dati, coerentemente all'header che abbiamo mandato.

Se hai un caso specifico in corso possiamo analizzarlo insieme e trovare una soluzione.


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

15 Dicembre, 2011 16:33 #5
darbula
Utente

darbula
Registrato: Dec, 2011
Posts: 4
Offline

Grazie molto gentile :)

Scusate prima ho omesso di dire che solo con l'apostrofo (il database,i javascript,php è le pagine xhtml sono impostate tutte in UTF-8) lo vedo non corretto con il browser ISO-8859-1 del cellulare mentre con browser UTF-8 tutto bene.
Simpley Machines Forum è costruito in php con output pagine xhtml 1.0 (anche wap2 è wml1.1).
Il problema dell'apostrofo è che appunto da php viene usato strreplace(',") il motivo non lo so. (credo che venga usato così per la maxiconformita per via di protezione mod_rewithe ON messo di default sul server APACHE).

Non sono stato abbastanza chiaro prima, per questo o ripetuto tutto il discorso.. Ps. Gli accenti li vedo bene con tutte e due le codifiche.

Però sarebbe corretto dire così: bisogna adeguare il charset UTF-8 al default del database da linea di comando mysql (oppure tramite php del tipo $db_charcter_set = 'UTF8';) con CHARACTER_SET 'utf8' è poi le pagine web con header per php, meta tag per html è xhtml in UTF-8 (Non il contrario!!!).
Con il comando di prima i figli di quel database erediteranno quella codifica (cioè le tabelle con ENGIME:MYISAM).
Le connessioni al database devono essere specificate con la query UTF-8 (con gli header è meta tag UTF-8 abbiamo colmato anche il web server) infine non dimenticate di dare il giusto output UTF-8 (hai vostri script è pagine web create) dal vostro programma utilizzato es. sotto windows c'è NOTEPAD++ dove dovete impostare di salvare i file con UTF-8 senza boom.

Si noti che se già avete la codifica UTF-8 con dei post ad esempio sul vostro forum di non cambiarla mai oppure fate così: (sconsigliato) sostituite gli Heaeder è meta tag in ISO-8859-1 degli script è pagine web è poi con un bel copia incolla create un nuovo file sulla codifica desiderata ad es. ISO-8859-1,dalla cannessione al database specificate ISO-8859-1 (ovviamente prima dovete fare l'importazione del database è tenere un backup non modificato per qualsiasi evenienza) nell l'importazione nel file .sql specificate come prima intestazione se non presente CHARACTER_SET 'latin1' ricordo con NOTEPAD++ di salvare il file con codifica ISO-8859-1.

(consigliato) Quando importate il database nel file .sql specifcate come prima intestazione se non presente CHARACTER_SET 'utf8' (nel caso il vostro forum fosse già funzionante UTF-8) ricordo con NOTEPAD++ di salvare il file con codifica UTF-8 senza boom.

Nota il linguaggio di programmazione java per la loro interpretazione interna usa UTF-16, su file utf-8 non standard.

Spero sia gradito il mio pensiero, però mi piacerebbe sapere come la pensate.

Ultima modifica 16 Dicembre, 2011 06:58 di darbula

16 Dicembre, 2011 06:21 #6
darbula
Utente

darbula
Registrato: Dec, 2011
Posts: 4
Offline

scusate il doppio post.
In sintesi :
1) (per ogni query di quel database) tramite query create la connessione eventualmente selezionate/create il vostro database per mysql è specificate con quale charset deve connettersi,
2) assicurarsi di aver salvato gli script è/o pagine web contenenti gli header è/o i meta tag giusti con la codifica che avete scelto.
Se seguite queste massime non dovrestre incontrare problemi sul vostro sito/forum che sia.

anche se sono fuori topic volevo chiedere se si può specificare una query esterna per il charset?
cioè io utente posso specificare una query in una pagina html attraverso mysql in cui io non ho accesso.
Mi servirebbe per mandare sms con il giusto charset.

Condividi su:

Loggati o Registrati per replicare