Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [mysql]Trovare caratteri non ascii

    Come posso trovare i caratteri che non appartengono alla tabella ascii 7bit all'interno di una tabella?
    Ho trovato in rete questa query:
    codice:
    SELECT * FROM TABLE WHERE NOT HEX(COLUMN) REGEXP '^([0-7][0-9A-F])*$';
    Però mi trova anche alcuni record che hanno solo caratteri ascii

    La applico a una tabella con collation latin1_swedish_ci e il campo è di tipo longtext (latin1_swedish_ci).

    Grazie!!

  2. #2
    sebbene si possa fare direi che è un'operazione un attimo "suicida" perché è MOSTRUOSAMENTE pesante

    Inoltre una tabella longtext può contenere fino a 4gb di testo il che significa che tu stai richiedendo a mysql, potenzialmente, di buttarsi in memoria 8gb di byte (un singolo byte/carattere verrebbe trasformato in 2 caratteri che identificano un byte della tabella ascii) per poi applicargli su un'espressione regolare.

    Decisamente, oltre a rivedere la struttura della tabella, ti consiglio anche di cambiare sistema ... perché non effettui questo controllo a priori, ovvero all'inserimento dei dati?

    In questo modo non avresti proprio il problema ... se contengono qualcosa che non devono contenere fai quello che devi fare (o se ti serve farlo in un secondo momento attivi un flag ... vedi tu)

    Comunque, giusto per convenienza la regexp ti converrebbe farla utilizzando i caratteri che ritieni che debbano esserci ... se poi ci devono stare tutti e 128 (che poi quelli "utilizzabili normalmente" sono molto meno) li scrivi a mano ... il processo andrebbe MOLTO più veloce anche se l'espressione regolare è leggermente più lenta

  3. #3
    Ciao, ti spiego un po' meglio il discorso.
    Sto convertendo un forum da snitz a mybb passando per phpbb2.
    Ho avuto diversi errori durante la conversione, causati da caratteri non ascii (sicuramente c'è modo di risolvere, ma tant'è.. ).

    Quello che sto cercando di fare è di convertire tutti i caratteri non ascii in qualcos'altro utilizzando replace (prima di fare il passaggio da snitz a phpbb). la query che ho riportato sopra mi serve per vedere quali sono i caratteri non ASCII che gli utenti hanno utilizzano, in modo da poterli convertire.

    Sebbene il campo sia immenso, in realtà (essendo i post di un forum) solitamente si sta sotto i 500/700 caratteri e la tabella, di per se, pesa intorno ai 70MB e la query impiega 3/4 secondi.

    Cmq, tu intendi qualcosa come questa query?
    codice:
    SELECT * FROM forum_reply WHERE R_MESSAGE REGEXP '^(^[:print:])+$'
    (e' corretta? non me la cavo un granchè con le regexp)

    thanks

  4. #4
    mmm allora è probabile che semplicemente il problema sia relativo alla codifica dei caratteri ... devi probabilmente cambiare la codifica dei caratteri in quella "corretta" per il forum di destinazione

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 © 2025 vBulletin Solutions, Inc. All rights reserved.