web-dev-qa-db-ja.com

MySQLでBLOBからTEXTに変換する方法を教えてください。

私はテキストがMySQLのBLOBに格納されているレコードをたくさん持っています。取り扱いを簡単にするために、データベースのフォーマットをTEXTに変更したいのですが…データを中断しないようにどのように変更を加えるのが簡単かという考えがあります。

191
Gwilym

それは不要です。 SELECT column FROM...の代わりにSELECT CONVERT(column USING utf8) FROM.....を使用するだけです。

217
Yuma

これは 誰かが TF-8 エンコーディングを使ってBLOBをchar(1000)に変換したい例です。

CAST(a.ar_options AS CHAR(10000) CHARACTER SET utf8)

これが彼の答えです。 CASTについてもっと読むことができるでしょう ここで 。助けになれば幸いです。

127
Ólafur Waage

私は同じ問題を抱えています、そしてこれが私の解決策です:

  1. bLOB列ごとにテーブルにテキスト型の新しい列を作成します。
  2. すべてのBLOBをテキストに変換して新しい列に保存する
  3. bLOB列を削除します
  4. 新しい列の名前を削除した列の名前に変更します。
ALTER TABLE mytable
ADD COLUMN field1_new TEXT NOT NULL,
ADD COLUMN field2_new TEXT NOT NULL;

update mytable set
field1_new = CONVERT(field1 USING utf8),
field2_new = CONVERT(field2 USING utf8);

alter table mytable
drop column field1,
drop column field2;

alter table mytable
change column field1_new field1 text,
change column field2_new field2 text;
14
Asped

とても簡単にできます。

ALTER TABLE `table_name` CHANGE COLUMN `column_name` `column_name` LONGTEXT NULL DEFAULT NULL ;

上記のクエリは私のために働きました。私はそれがあなたにも役立つことを願っています。

8

MYSQL-WORKBENCHを使用している場合は、通常blobカラムを選択し、カラムを右クリックしてopenをクリックします。エディタ内の値スクリーンショットを参照してください。

screenshot

3
ankit

あるいは、この機能を使うこともできます。

DELIMITER $$

CREATE FUNCTION BLOB2TXT (blobfield VARCHAR(255)) RETURNS longtext
DETERMINISTIC
NO SQL
BEGIN
       RETURN CAST(blobfield AS CHAR(10000) CHARACTER SET utf8);
END
$$


DELIMITER ;
1

これらの答えはどれも私にとってはうまくいきませんでした。 UTF8に変換するときに、エンコーダーが一連のバイトを検出すると、UTF8に変換できないため、?データ損失の原因となる代替。 UTF16を使用する必要があります。

SELECT
    blobfield,
    CONVERT(blobfield USING utf16),
    CONVERT(CONVERT(blobfield USING utf16), BINARY),
    CAST(blobfield  AS CHAR(10000) CHARACTER SET utf16),
    CAST(CAST(blobfield  AS CHAR(10000) CHARACTER SET utf16) AS BINARY)

MySQL Workbenchでバイナリ値を検査できます。フィールドを右クリック->ビューアーで値を開く->バイナリー。バイナリに変換して戻す場合、バイナリ値は元の値と同じである必要があります。

または、この目的のために作成されたbase-64を使用することもできます。

SELECT
    blobfield,
    TO_BASE64(blobfield),
    FROM_BASE64(TO_BASE64(blobfield))
0
Dean Or