タイ語と英語の両方を含むMySQL UTF8mb4データベースをPostgresqlに変換しようとしています。これは、私が試して、tsearchを追加するまで、 になるようです。私が取ったステップの概要を説明しましょう。Postgresqlエンコーディングの問題tgarchを使用したtsearchの使用Pgloaderを使用したMariaDBからの変換後
- 私が原因彼らが行方不明 であることにPostgreSQLのつまずかいくつか列挙値を修正
- MariaDB にダンプファイルからローカル生産のコピーを復元 https://github.com/zdk/pg-search-thai
- このタイパーサをインストールします。 MariaDBはpgloaderが優雅にそれらに対処しないよう
が テキスト形式にいくつかのポリゴンを変換し、それら:(に満足している。新鮮なPostgreSQLデータベースに対して -run pgloader、TESTDB
pgloader mysql://$MYSQL_USER:[email protected]/$MYSQL_DB postgresql://$PG_USER:[email protected]/testdb
これはうまくいくように見えますが、Laravelのサイトは機能しているようですが、MariaDBとPostgresqlの制約の違いのために、 の違いにより修正するバグがありますが、tsearchのテキストベクトルを作成しようとすると、 エンコードの問題。これは私がアドバイスが必要なところです。私はそのテーブルをダンプし、私はエンコードのエラーを取得しない新しいPostgreSQLデータベースにリストアする場合は
-- 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, ''));
私が手にエラーがERROR: invalid byte sequence for encoding "UTF8": 0x80
です。
質問:
- pgloaderはPostgreSQLするUTF8mb4に使用する正しいエンコーディングとは何ですか?
- 上記以外の正しいUTF8のデータをチェックする方法はありますか?
- タイパーサーツールで問題が発生していますか?
これを解決する方法についてのご意見はありがとうございます。
乾杯、
ゴードン
PSは、私が経験豊富な開発者ではなく、経験豊富なDBAです。
ヘックス '80'のコンテキストを見つけることはできますか?おそらくそれはより大きな文字列の一部ですか? –