2016-02-16 21 views
5

Ho un database (Mysql) in cui memorizzo più di 100.000 parole chiave con parole chiave in diverse lingue. Quindi un esempio se ho tre colonne [id] [turco (utf8_turkish_ci)] [tedesco (utf8)]Codifica database multilingue nel motore di ricerca

Gli utenti possono inserire una parola tedesca o turca nella casella di ricerca. Se l'utente inserisce una parola tedesca tutto va bene, quindi stampa la parola turca ma come risolverla con quella turca. Lo chiedo perché ogni lingua ha le sue caratteri aggiuntivi come un ü O S ecc

Quindi devo usare

mb_convert_encoding 

per convertire la stringa, ma poi come per verificare se si tratta di una stringa di tedesco o turco I penso che sarebbe complesso. Oppure la codifica dei tavoli è sbagliata?

Bloccato ora così come implementarlo in modo che l'utente potrebbe inserire la parola chiave di entrambe le lingue parole

+0

controllare con UTF-8 –

risposta

0

avete diversi problemi da risolvere per rendere correttamente questo lavoro.

In primo luogo, hai scelto il utf8 set di caratteri per contenere tutto il vostro testo. Questa è una buona scelta. Se si tratta di un'applicazione new-in-2016, è possibile scegliere il set di caratteri utf8mb4. Una volta scelto un set di caratteri, i tuoi utenti dovrebbero essere in grado di leggere il tuo testo.

In secondo luogo, per il bene della ricerca e l'ordinamento (WHERE e ORDER BY) è necessario scegliere un confronto appropriata per ogni lingua. Per il tedesco moderno, utf8_general_ci funzionerà abbastanza bene. utf8_unicode_ci funziona un po 'meglio se hai bisogno di un ordinamento lessicale standard. Leggi questo. http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html

Per lo spagnolo moderno, è necessario utilizzare utf8_spanish_ci. Questo perché in spagnolo i caratteri N e Ñ non sono considerati uguali. Non so se la collazione generale funzioni per il turco.

Si noti che sembra aver confuso le nozioni di set di caratteri e regole di confronto nella domanda. Hai menzionato una collazione con la tua colonna turca e un set di caratteri con la tua colonna tedesca.

È possibile specificare in modo esplicito set di caratteri e regole di confronto nelle query. Ad esempio, è possibile scrivere

WHERE _utf8 'München' COLLATE utf8_unicode_ci = table.name; 

In questa espressione, _utf8 'München' è una costante carattere e

constant COLLATE utf8_unicode_ci = table.name 

è un identificatore di richiesta che include un nome di confronto esplicito. Leggi questo. http://dev.mysql.com/doc/refman/5.7/en/charset-collate.html

Terzo, si può decidere di assegnare un predefinito di confronto da ogni colonna specifica lingua. Le regole di confronto predefinite vengono inserite negli indici, quindi contribuiranno ad accelerare la ricerca.

Quarto, gli utenti dovranno utilizzare un metodo di input appropriato (mappatura della tastiera, ecc.) Per presentare i dati all'applicazione. Speriamo che gli utenti di lingua turca sappiano come digitare parole turche.

+0

Ho dimenticato di scrivere che salvi le parole turche sostituendo i caratteri speciali con l'unicode così forse dovrò usare strtr() per rilevare un carattere in una stringa per sostituirlo con l'unicode per invia la query – FKayan

+0

Voglio dire che uso strtr() con un array – FKayan