Bagaimana cara saya mengkonversi dari BLOB ke TEXT di MySQL?


214

Saya memiliki banyak sekali catatan di mana teks telah disimpan dalam gumpalan di MySQL. Untuk memudahkan penanganan, saya ingin mengubah format dalam basis data ke TEXT ... Adakah ide bagaimana mudahnya melakukan perubahan agar tidak mengganggu data - saya kira perlu dikodekan dengan benar?

Jawaban:


258

Itu tidak perlu. Cukup gunakan SELECT CONVERT(column USING utf8) FROM..... bukan hanya SELECT column FROM...


24
Penggunaan:SELECT CONVERT(column USING utf8) FROM table;
bmaupin

4
Ini berfungsi baik untuk GROUP_CONCATs yang mengubah output Anda menjadi gumpalan dan Anda benar-benar menginginkannya sebagai string. Saya punya masalah yang mirip dengan OP saat menggunakan Node.JS dengan perpustakaan node-mysql - ini memperbaiki semua masalah group_concat.
marksyzm

Karya ini, dan juga dapat digunakan dengan kueri panas seperti CONVERT (LEFT (MD5 ([ID]), 8) MENGGUNAKAN utf8)
ZenithS

Ini tidak akan berhasil. Charset haruslah utf16 atau jika tidak maka akan menghasilkan kehilangan data jika bertemu dengan serangkaian byte yang tidak dapat dikonversi ke utf8. Ini akan menggantikan byte tersebut dengan? karakter yang mengakibatkan hilangnya data.
Dean Or

128

Berikut adalah contoh seseorang yang ingin mengonversi gumpalan menjadi char (1000) dengan pengkodean UTF-8 :

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

Ini jawabannya. Mungkin ada banyak lagi yang bisa Anda baca tentang CAST di sini . Saya harap ini membantu.


5
Sayangnya ini tidak bekerja untuk saya. Saya mendapatkan baris kosong dan terkadang hanya 1-karakter-output dengan simbol aneh.
C4d

Bekerja di kueri pemilihan juga, pilih A.id, CAST (B.content AS CHAR (10000) CHARACTER SET utf8) sebagai konten, Bb dari A bergabung B ON B.content_id = A.content_id
dkb

15

Saya memiliki masalah yang sama, dan inilah solusi saya:

  1. buat kolom baru tipe teks dalam tabel untuk setiap kolom gumpalan
  2. konversi semua gumpalan ke teks dan simpan di kolom baru
  3. hapus kolom gumpalan
  4. ganti nama kolom baru dengan nama yang dihapus
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;

2
Ini adalah satu-satunya jawaban yang berhasil untuk saya, terima kasih :)
Tom

Kolom perantara melakukan trik. Terus mendapatkan kesalahan mengutip karakter buruk melalui semua metode dan jawaban lainnya. Terima kasih
gillytech

8

Anda dapat melakukannya dengan sangat mudah.

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

Permintaan di atas bekerja untuk saya. Saya harap ini membantu Anda juga.


8

Jika Anda menggunakan MYSQL-WORKBENCH , maka Anda dapat memilih kolom gumpalan secara normal dan klik kanan pada kolom dan klik nilai terbuka di editor . lihat tangkapan layar:

tangkapan layar


2

Atau Anda dapat menggunakan fungsi ini:

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

Tangkapan layar phpMyAdmin Menggunakan phpMyAdmin Anda juga dapat mengatur opsi untuk menampilkan konten BLOB dan menampilkan teks lengkap.


Bagaimana tepatnya seseorang melakukan hal ini? Jawaban Anda akan jauh lebih membantu jika Anda memposting beberapa kode dan / atau tangkapan layar yang merinci hal itu.
TrampolineTales

0

Tidak satu pun dari jawaban ini yang berhasil untuk saya. Ketika mengkonversi ke UTF8, ketika encoder menemukan satu set byte yang tidak dapat dikonversi ke UTF8 itu akan menghasilkan? substitusi yang menyebabkan hilangnya data. Anda perlu menggunakan 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)

Anda dapat memeriksa nilai-nilai biner di MySQL Workbench. Klik kanan pada bidang -> Nilai Terbuka di Penampil-> Biner. Ketika dikonversi kembali ke BINARY, nilai binernya harus sama dengan aslinya.

Atau, Anda bisa menggunakan basis-64 yang dibuat untuk tujuan ini:

SELECT
    blobfield,
    TO_BASE64(blobfield),
    FROM_BASE64(TO_BASE64(blobfield))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.