Visualizzazione dei risultati da 1 a 7 su 7

Hybrid View

  1. #1

    MySQL 5 - conversione charset su db popolato

    Ho un database composto da 100 tabelle avente set di caratteri Latin1,
    tutte le tabella sono create con CHARSET=latin1,
    tutti i campi testuali ereditano il charset della tabella quindi latin1
    Il database è già popolato da molti testi in lingua italiana.

    La mia nuova necessità è gestire nello stesso DB anche testi in cirillico, quindi:
    - nel db ho creato nuovi campi con CHARSET = UTF-8
    - nel mio profilo odbc ho settato Character Set = UTF8
    - nelle pagina web dinamiche ho inserto il tag: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    Il problema è che nella stessa pagina devo visualizzare sia testi in cirillico che in italiano, quindi presumo debba convertire tutti i campi che ospitato testi in italiano da charset=latin1 a charset=utf8

    Esempio:
    Codice PHP:
    aALTER TABLE `PippoCHANGE COLUMN `p_ita` ` p_itaVARCHAR(250CHARACTER SET 'utf8';
    bALTER TABLE `PlutoCHANGE COLUMN `desc_ita` ` Desc _itaTEXT CHARACTER SET 'utf8' ;
    cALTER TABLE Paperino CHANGE COLUMN ... TEXT CHARACTER SET 'utf8' ;
    ... 
    domande:
    - le istruzioni (a),(B) , (C), ... producono una conversione automatica e corretta di tutti i caratteri già contenuti nei relativi campi ?
    - esiste una un’istruzione unica che mi converte tutto il DB in utf8 senza dovero fare l'Alter su ogni campo?

    Grazie a tutti

  2. #2
    Quote Originariamente inviata da Marvellous Visualizza il messaggio
    Esempio:
    Codice PHP:
    aALTER TABLE `PippoCHANGE COLUMN `p_ita` ` p_itaVARCHAR(250CHARACTER SET 'utf8';
    bALTER TABLE `PlutoCHANGE COLUMN `desc_ita` ` Desc _itaTEXT CHARACTER SET 'utf8' ;
    cALTER TABLE Paperino CHANGE COLUMN ... TEXT CHARACTER SET 'utf8' ;
    ... 
    domande:
    - le istruzioni (a),(B) , (C), ... producono una conversione automatica e corretta di tutti i caratteri già contenuti nei relativi campi ?
    - esiste una un’istruzione unica che mi converte tutto il DB in utf8 senza dovero fare l'Alter su ogni campo?
    Nessuna conversione automatica tra un charset single byte ed uno multi byte. Comunque basta provare su una copia della tabella per vedere cosa succede. Utf8 non saprebbe distinguere tra un carattere single byte ed uno che per lui dovrebbe essere multi. Sarebbe preveggenza. Mentre da 2 byte potresti ricavarne uno da uno non puoi sapere quale sarebbe il secondo o terzo.

    Con un db di nomi di autori di tutto il mondo per mettere correttamente gli accenti al loro posto ho dovuto eseguire un dump, portare su editor in ansi, modificare il tipo di charset, settare la connessione con il nuovo charset ed eseguire il restore su una tabella di prova. Alla fine per ottenere proprio tutti gli accenti ho dovuto utilizzare questi caratteri convertiti in entita' html.

    Il caracter set e' settato sul server, sul db, sui campi. In piu' sulla connessione al client ed anche il client. Vanno modificati singolarmente.

    Quindi la mia esperienza e' stata: backup del latin1 e salvaguardato come storico, copia del db in altro di prova ed esecuzione di tutte le prova possibili, ottenuto un backup corretto inserimento online della variazione con la correzione dei meta ecc..

    Questo e' il mio 2 cents di supporto al riguardo.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Molto chiaro Piero.mac, grazie mille.
    Di seguito link ad articolo interessante relativo a quanto in oggetto:
    http://docs.moodle.org/23/en/Convert...tabase_to_UTF8

  4. #4
    Qual'ora mantenga questa situazione:
    Ho un database composto da 100 tabelle avente set di caratteri Latin1,
    tutte le tabella sono create con CHARSET=latin1,
    tutti i campi testuali ereditano il charset della tabella quindi latin1
    Il database è già popolato da molti testi in lingua italiana.

    La mia nuova necessità è gestire nello stesso DB anche testi in cirillico, quindi:
    - nel db ho creato nuovi campi con CHARSET = UTF-8
    Quindi nella stessa tabella ho campi in latin1 e campi in utf-8,
    potrei avere problemi con le fasi di DUMP e import del DB?

  5. #5
    sinceramente uniformerei tutto il charset a partire dal db -> tabelle -> campi

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Quote Originariamente inviata da piero.mac Visualizza il messaggio
    sinceramente uniformerei tutto il charset a partire dal db -> tabelle -> campi
    sto cercando di evitarlo per non dover convertire tutti i caratteri speciali (es: lettere accentate) in entita' html; ci impiegherei una vita.

    Ho letto alcuni articoli, tra cui
    http://www.bothernomore.com/2008/12/...encoding-hell/
    che propongono quanto segue:
    - convertire i campi di testo da latin1 in blob (binario),
    - poi cambiare charset al DB,
    - infine riconvertire i campi di testo da blob a UTF8

    Chissa se funziona!

  7. #7
    il medoto sopra citato funziona se nei campi latin NON sono memorizzate lettere accentate, viceversa durante la conversione da blob a varchar utf8 mysql visualizza il seguente errore:
    [16:18:03] Maurizio Mangherini: ERROR 1366: Incorrect string value: '\xE0'

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.