In un progetto su cui sto lavorando i miei dati sono archiviati in SQL Server, con la fascicolazione Danish_Norwegian_CI_AS
. I dati vengono inviati tramite FreeTDS e ODBC, a python che gestisce i dati come UTF-8. Alcuni dei personaggi, come å, ø e æ, non vengono codificati correttamente, causando l'arresto del progetto.È possibile che SQL Server converta regole di confronto in UTF-8/UTF-16
Ho passato un paio d'ore a leggere sul mondo confuso di codifiche, fascicolazione e code-page, e mi sento come se avessi capito meglio l'intera immagine.
Alcuni degli articoli che ho letto, mi fanno pensare che sarebbe possibile: Specificare nell'istruzione di selezione SQL, che i dati di confronto debbano essere codificati in UTF-8 quando viene emesso.
Il motivo per cui penso sia possibile è this article che mostra un esempio di come arrivare ai tavoli, con regole di confronto diverse, per giocare bene insieme.
Tutti i puntatori nella direzione della conversione di regole di confronto in UTF-8/UTF-16, sarebbero molto apprezzati!
EDIT: Ho letto che SQL Server fornisce un'opzione unicode attraverso nchar
, nvarchar
e ntext
, e che le altre variabili stringa char
, varchar
e text
sono codificati secondo attivare la fascicolazione. Ho anche letto che le opzioni unicode sopra menzionate sono codificate nella variante utf-16 ucs-2 (spero di ricordarmelo bene). Così; per consentire tabelle di regole di confronto e unicode, per giocare bene, dovrebbe esserci una funzione di conversione, no?
con un problema simile utilizzando mySQL e jdbc, questo ha risolto il mio problema. creando le tabelle usando 'create table a (.....) DEFAULT CHARSET = utf8;' e connettendosi al database usando ''" jdbc: mysql: // localhost/testDb? useUnicode = true & characterEncoding = UTF-8 ";' quindi presumo ci debba essere un modo con MS SQL sever –
@SkarosIlias Grazie per il vostro contributo. Sfortunatamente la tabella è già stata creata e popolata, quindi non è un'opzione per me. – Rookie
fare un tentativo con una nuova tabella e inserire alcuni dati di test solo per assicurarsi che questo funzioni. se fa un 'alter table' –