2017-07-11 5 views
0

J'essaie de convertir une base de données MySQL UTF8mb4 qui contient à la fois Thai et Anglais en Postgresql. Cela semble aller bien jusqu'à ce que j'essaie d'ajouter tsearch. Permettez-moi de décrire les mesures prises.Problème de codage Postgresql avec tsearch avec texte thaï après la conversion de MariaDB avec Pgloader

  • Installez cet analyseur Thai https://github.com/zdk/pg-search-thai
  • Je ramènerai une copie de la production locale à partir d'un fichier de vidage dans MariaDB
  • Correction de quelques valeurs ENUM Remontée Postgresql en raison de leur être portés disparus. MariaDB est heureux avec eux :(
  • Convertir des polygones format texte pgloader ne traite pas avec eux gracieusement. pgloader -Exécuter contre une nouvelle base de données postgresql, testdb

    pgloader mysql://$MYSQL_USER:[email protected]/$MYSQL_DB postgresql://$PG_USER:[email protected]/testdb

Cela semble fonctionner, le site, un Laravel, semble fonctionner, bien que quelques bogues soient corrigés en raison des différences entre les comportements de la contrainte MariaDB et Postgresql, mais lorsque j'essaie de créer des vecteurs de texte pour tsearch, je rencontre problèmes d'encodage. C'est ici que j'ai besoin de conseils.

-- trying to create minimal case, dumping Thai names into a temporary table 
CREATE EXTENSION thai_parser; 
CREATE TEXT SEARCH CONFIGURATION thai_unstemmed (PARSER = thai_parser); 
ALTER TEXT SEARCH CONFIGURATION thai_unstemmed ADD MAPPING FOR a WITH simple; 

-- to test the parser is working, which it is 
SELECT to_tsvector('thai_unstemmed', 'ข้าวเหนียวส้มตำไก่ย่าง ต้มยำกุ้ง in thailand'); 

-- to recreate my error I did this 
CREATE TABLE vendor_names AS SELECT id,name from vendors_i18n; 
ALTER TABLE vendor_names ADD COLUMN tsv_name_th tsvector; 

-- this fails 
UPDATE vendor_names SET tsv_name_th=to_tsvector('thai_unstemmed', coalesce(name, '')); 

L'erreur que je reçois est ERROR: invalid byte sequence for encoding "UTF8": 0x80

Si je Dump table et de rétablir dans une nouvelle base de données Postgresql Je ne reçois pas l'erreur de codage.

Questions:

  • Quel est le codage correct à utiliser pour UTF8mb4 à Postgresql pour pgloader?
  • Existe-t-il un moyen, autre que celui ci-dessus, de vérifier si les données sont correctes UTF8 ou non?
  • Le problème est-il dans l'outil d'analyse syntaxique thaï?

Des suggestions sur la façon de résoudre ce problème seraient appréciées.

Cheers,

Gordon

PS Je suis un développeur expérimenté, mais pas un DBA expérimenté.

+0

Pouvez-vous trouver le contexte de l'hexagone '80'. Peut-être que cela fait partie d'une plus grande chaîne? –

Répondre

0

Avez-vous essayé d'importer manuellement l'ensemble de données ligne par ligne pour voir quelles lignes sont importées avec succès et lesquelles échouent? Si certaines importations réussissent mais d'autres échouent, cela semble être un problème d'intégrité des données.

Si aucun des enregistrements ont été importés avec succès, il s'agit manifestement d'un problème d'encodage.