Come modificare la codifica dei caratteri di una connessione PDO / SQLite in PHP?
Domanda
Sto riscontrando un piccolo problema con un'app php-gtk che continua a funzionare in stringhe non utf8, ho scoperto che il problema è nella connessione al database, anche quando si suppone che il database sia in UTF-8.
Avevo provato con "SET CHARACTER SET utf8" (modalità MySQL) e "SET NAMES UTF8" e non succede nulla (non ci sono informazioni su nessuno di questi comandi nel " Lingua della query compresa da SQLite " pagina, quindi non mi sorprende).
PD: forse la connessione è già in UTF-8 e i dati non lo sono, ma se c'è un modo per cambiare la codifica della connessione questa domanda sarebbe comunque utile.
Soluzione
Per quanto ne so, SQLite ha solo un'impostazione per charset , che è a livello di database. Non è possibile modificare la codifica sulla connessione.
L'API C ha due modi diversi di aprire una connessione, sia come UTF- 8 o UTF-16. Mi aspetto che il modulo SQLite di PHP (e quindi il PDO) utilizzi semplicemente la versione UTF-8. Se è corretto, mi aspetto che una connessione SQLite sia sempre UTF-8. Ciò significa che devi codificare / decodificare manualmente le stringhe con utf8_encode / utf8_decode .
Vedi anche: http://www.alberton.info/dbms_charset_settings_explained.html