270 votes

Comment convertir un BLOB en TEXTE dans Mysql ?

J'ai un grand nombre d'enregistrements où le texte a été stocké dans un blob dans MYSQL. Pour faciliter la manipulation, j'aimerais changer le format de la base de données en TEXTE. Avez-vous une idée de la manière la plus simple d'effectuer ce changement sans interrompre les données - je suppose qu'elles devront être encodées correctement ?

333voto

Yuma Points 521

C'est inutile, utilisez simplement SELECT CONVERT(column USING utf8) FROM ..... au lieu de simplement SELECT column FROM .....

30 votes

Utilisation : SELECT CONVERT(column USING utf8) FROM table;

4 votes

Cela fonctionne très bien pour les GROUP_CONCAT qui convertissent votre sortie en blobs alors que vous voulez vraiment qu'ils soient des chaînes de caractères. J'ai eu un problème similaire à celui de l'OP en utilisant Node.JS avec la bibliothèque node-mysql - ceci a résolu tous les problèmes de group_concat.

1 votes

Ce travail, et aussi peut utiliser avec la requête chaude comme CONVERT(LEFT(MD5([ID]),8) USING utf8)

135voto

Ólafur Waage Points 40104

Après avoir fait quelques recherches pour vous, j'ai trouvé ceci. C'est une réponse à une personne qui veut convertir un blob en char(1000) avec un encodage utf8.

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

Voici sa réponse. Il y a probablement beaucoup d'autres choses à lire sur CAST. ici même . J'espère que cela vous aidera.

5 votes

Malheureusement, cela ne fonctionne pas pour moi. J'obtiens des lignes vides et parfois seulement une sortie à un caractère avec des symboles étranges.

0 votes

Cela fonctionne aussi dans la requête select, select A.id,CAST(B.content AS CHAR(10000) CHARACTER SET utf8) as content

18voto

Asped Points 765

J'ai eu le même problème, et voici ma solution :

  1. créer de nouvelles colonnes de type texte dans la table pour chaque colonne de blob
  2. convertir tous les blobs en texte et les enregistrer dans les nouvelles colonnes
  3. supprimer les colonnes de blob
  4. renommer les nouvelles colonnes avec les noms des colonnes supprimées
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 votes

C'est la seule réponse qui a fonctionné pour moi, merci :)

0 votes

La colonne intermédiaire a fait l'affaire. Je continuais à obtenir des erreurs en citant les mauvais caractères via toutes les autres méthodes et réponses. Merci

14voto

ankit Points 330

Si vous utilisez MYSQL-WORKBENCH Vous pouvez alors sélectionner la colonne blob normalement et faire un clic droit sur la colonne puis cliquer sur ouvrir la valeur dans l'éditeur . voir la capture d'écran :

screenshot

1 votes

Pour votre information (pour que les gens n'aient pas à cliquer sur l'image ci-dessus pour voir ce que cela fait) : cela affiche UNE valeur à la fois - cela ne résout pas le désir de voir le texte de cette colonne dans toutes les lignes.

9voto

Jignesh Mesvaniya Points 137

Vous pouvez le faire très facilement.

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

La requête ci-dessus a fonctionné pour moi. J'espère qu'elle vous aidera aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X