2012-07-13 11 views
6

Non riesco a capirlo per la vita di me.MySQL European Characters

Ho una query che richiama traduzioni di elementi in una pagina. Quindi qualsiasi numero di 15 lingue può apparire su quella pagina. Quando inizio ad aggiungere lingue come lo svedese qualsiasi cosa che ha un simbolo come ö, i risultati nell'intero campo restituiscono una stringa nulla.

Ho verificato la codifica sul tavolo e afferma che sta usando UTF-8 ma visto che questo non funziona sono confuso.

Ecco la domanda con cui sto lavorando:

SELECT 
    form.form_id, 
    elem.elem_type, 
    elem.elem_name, 
    elem.elem_format, 
    elem.elem_required, 
    trans.trans_label,` 
    trans.trans_description, 
    trans.trans_defaultValue, 
    trans.trans_other, 
    elem.elem_advancedcommand 
FROM 
    events_form form 
LEFT JOIN 
    events_form_elements elem 
ON 
    form.event_id = elem.event_id 
INNER JOIN 
    events_form_translations trans 
ON 
    elem.elem_id = trans.elem_id 
INNER JOIN 
    events_form_languages lang 
ON 
    trans.lang_id = lang.lang_id 
WHERE 
    form.form_id = '{$formid}' AND lang.language = '{$language}' 
ORDER BY 
    elem.elem_sortorder 

Ora ho cercato di fare qualcosa di simile:

CONVERT(CAST(trans.trans_description as BINARY) USING latin1) as trans_description,

Per forzarlo per convertire la codifica, ma che non lo fa dare un risultato a tutti.

Dopo aver ottenuto il risultato, è immediatamente json_encoded e restituito all'utente (richiesta Ajax). NON credo che il json_encode come un print_r della matrice di output restituisca gli stessi problemi.

Inoltre, infine, il sistema su cui sto lavorando utilizza xPDO, quindi non sono sicuro se sia questo il problema.

EDIT: Sembra che PHP restituisce un valore corretto o almeno un valore per esempio qui è una discarica print_r:

[trans_label] => Ditt f�rnamn? 
[trans_description] => 
[trans_defaultValue] => First Name 

Così sembra che quando il mio json_encode tocca che stringa è quando si trasforma la stringa su null.

+3

avete fatto imposta il set di caratteri corretto (in markup e come php-header) sulla pagina e ti chiede "SET NA MES UTF8 "prima di selezionare i dati? – 32bitfloat

+0

Hai una query abbastanza complicata lì. Perdonami per aver chiesto l'ovvio: i dati sono corretti? Ottenere valori NULL non è un tipico problema di codifica dei caratteri. – Joni

+0

@JoniSalonen Sì, il mio client SQL recupera le informazioni corrette ma quando invia il codice viene restituito con una stringa NULL. – Peter

risposta

10

La stringa di connessione PDO deve specificare la codifica. Per esempio:

mysql:host=localhost;port=3306;dbname=test;charset=utf8 

Controlla la codifica che il driver di database utilizzerà quando si restituisce un risultato, e la codifica il conducente assume le vostre domande sono in Se non si specifica che, la codifica di default. sarà usato. Spesso il valore predefinito è latin1.

È possibile verificare ciò stampando la rappresentazione esadecimale dei dati con bin2hex in PHP: il valore di in förnamn viene restituito come f6. Se il testo fosse codificato in UTF-8 otterresti c3b6.

+0

Ho hackerato il CMS che sto usando per forzare l'utilizzo di UTF8 come suggerito, ma sto ancora ricevendo un output simile al seguente: 'Det h rf ltet kan inte l mnas blankt. ' – Peter

+0

Ignora sopra: EDIT: Ha funzionato. Il cambiamento che avevo fatto ha gettato un server 500 ma con un po 'più di tweaking ha funzionato alla grande. Grazie! Hai appena terminato una ricerca di tre giorni. – Peter

3

Non hai detto nulla sulla codifica delle tue pagine web.
Hai questa linea nella sezione <head> della tua pagina per forzare la codifica su UTF-8?

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
0

La tua risposta è nullo dopo la conversione a causa di incompatibilità dei dati types.But che mostra i caratteri europei o arabi sulla pagina è abbastanza simple.I avuto lo stesso problema con la lingua araba, ma dopo poche esperimento suoi lavori bene ora .

Se si desidera visualizzare i caratteri europei sulla pagina (JSP, PHP, HTML) primo set la codifica pagina ad UTF-8 come: -

pageEncoding = "utf-8"

E hai bisogno anche di alcuni cambiamenti sulla vostra classe di connessione al database per UTF-8 caratteri

Utilizzare il codice qui sotto: -

jdbc: mysql: your_ipaddress ": 3306 /"? + Db + "requireSSL = false & useUnicode = true & characterEncoding = UTF-8

Spero che vi aiuterà.

1

Ho avuto problemi endcoding lettere per la mia lingua madre islandese ma Ive ha trovato una soluzione comune per tutti utf8 lettere.

subito dopo mysql_select_db e prima mysql_query inserire il seguente:

mysql_query("SET character_set_connection=utf8, 
character_set_results=utf8, 
character_set_client=utf8", $con); 

Dove $ neo è la connessione a MySQL

Felice di codifica ..