web-dev-qa-db-fra.com

Comment convertir des fichiers BLOB en TEXT dans MySQL?

J'ai beaucoup d'enregistrements où du texte a été stocké dans un blob dans MySQL. Pour faciliter le traitement, j'aimerais changer le format de la base de données en TEXT ... Des idées sur la facilité avec laquelle vous pouvez effectuer le changement afin de ne pas interrompre les données - j'imagine qu'il faudra coder correctement?

195
Gwilym

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

224
Yuma

Voici un exemple de ne personne qui veut convertir un blob en caractère (1000) avec l'encodage TF-8 :

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

C'est sa réponse. Il y a probablement beaucoup plus à lire sur CAST ici . J'espère que ça aide certains.

128
Ólafur Waage

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

  1. créer de nouvelles colonnes de type text dans la table pour chaque colonne blob
  2. convertir tous les blobs en texte et les sauvegarder dans les nouvelles colonnes
  3. enlever les colonnes 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;
14
Asped

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 que cela vous aide aussi.

8
Jignesh Mesvaniya

Si vous utilisez MYSQL-WORKBENCH , vous pouvez sélectionner la colonne blob normalement, cliquer avec le bouton droit de la souris sur la colonne et cliquer sur pour l'ouvrir. valeur dans l'éditeur . reportez-vous à la capture d'écran:

screenshot

3
ankit

Ou vous pouvez utiliser cette fonction:

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
Adam Sánchez Ayte

Aucune de ces réponses n'a fonctionné pour moi. Lors de la conversion en UTF8, lorsque le codeur rencontre un ensemble d'octets, il ne peut pas convertir en UTF8, le résultat est un? substitution qui entraîne une perte de données. Vous devez utiliser 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)

Vous pouvez inspecter les valeurs binaires dans MySQL Workbench. Faites un clic droit sur le champ -> Open Value dans Viewer-> Binary. Une fois reconverties en BINARY, les valeurs binaires doivent être identiques à celles d'origine.

Alternativement, vous pouvez simplement utiliser la base 64 qui a été faite à cette fin:

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