È necessario eseguire questa operazione al di fuori di mySQL.
È possibile normalizzare la stringa all'interno mySQL come dimostrano @Christian utilizzando CONVERT()
, ma che distruggerà tutti gli altri caratteri non-ASCII presenti:
Bürgercafé Römer
finirebbe
Burgercafz Romer
personaggi altri set di caratteri come il cirillico o il cinese verrebbero cancellati del tutto.
Il tuo miglior risultato è quello di sostituire in modo specifico tutti i caratteri che desideri sostituire.
replace('Café Rouge','e','z')
replace('Café Rouge','é','z')
replace('Café Rouge','è','z')
Per fare esattamente ciò che si vuole, che avrebbe dovuto caricare ogni stringa in un linguaggio di programmazione come PHP.
Lì, si può fare come segue:
Carica la stringa dal database; assicurarsi che sia UTF-8
dividere la stringa nelle sue caratteri (essere consapevoli di caratteri multibyte - utilizzare mb_split()
)
Passeggiata attraverso ogni carattere
Normalizzare il carattere utilizzando iconv($character, "UTF-8", "ASCII//TRANSLIT");
Se il carattere normalizzato risulta in e
, è necessario sostituirlo nella stringa.
Riportare la stringa modificata nel database.
Questo, tuttavia, sembra un sacco di guai per quello che sembra una piccola cosa. Sei proprio sicuro che sia necessario?
fonte
2013-07-08 08:03:30
Non sono sicuro se questo comportamento può essere modificato - 'REPLACE()' sta probabilmente facendo un confronto binario. Non è un'opzione semplicemente sostituire in modo esplicito 'é'? –
perché è necessario sostituire "é"? probabilmente dovresti creare una nuova colonna 'company_normalized' dove puoi inserire un valore senza accento, troncato, con spazi normalizzati ecc. e quindi usare la variante normalizzata dove è utile, e il nome della compagnia reale altrimenti ... – sasjaq
No :(non è un opzione perché potrebbero esserci molti altri caratteri che causeranno problemi. Inoltre, non posso modificare la mia tabella in regole di confronto binarie perché attualmente stiamo usando insensibilità alle maiuscole e minuscole e cambiandola in binario significherà cambiamenti in vari luoghi. – Jeets