1

そのようなデータを変換するにはどうすればよいですか

\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d

MySQL内の通常のUTF8に戻りますか?それも可能ですか?

4

1 に答える 1

0

データをバイナリとして読み取り、次のようにターゲットの文字セットに変換することで、mysqlの文字セット間で変換できます(テーブルとexample列が次のように呼ばれる場合data

UPDATE `example` SET data=CONVERT(CONVERT(`data` USING binary) USING utf8);

JSON \ uXXXXエンティティは16進数のUTF-16エンコーディングであるため、utf-16をサポートするmysqlバージョンがある場合は、それらをutf-8に変換できます。以下の関数は、その方法を示しています。まず、これらの値をunhex()してから、UTF-16からUTF-8に変換します。

DELIMITER @@
CREATE FUNCTION Unjson (instring TEXT CHARACTER SET utf8)
RETURNS TEXT CHARACTER SET utf8
BEGIN

  DECLARE i INT DEFAULT 0;
  DECLARE c VARCHAR(1);
  DECLARE utfstr TEXT CHARACTER SET utf16 DEFAULT "";
  DECLARE outstring TEXT CHARACTER SET utf8 DEFAULT "";

  WHILE i < CHAR_LENGTH(instring) DO
    SET i = i + 1;
    SET c = SUBSTRING(instring, i, 1);
    IF c = "\\" THEN
      SET c = SUBSTRING(instring, i + 1, 1);
      IF c = "u" THEN
        SET utfstr = CONCAT(utfstr, UNHEX(SUBSTRING(instring, i + 2, 4)));
        SET i = i + 5;
      END IF;
    ELSE
      IF utfstr != "" THEN
        SET outstring = CONCAT(outstring, CONVERT(utfstr USING utf8));
        SET utfstr = "";
      END IF;
      SET outstring = CONCAT(outstring, c);
    END IF;
  END WHILE;
  IF utfstr != "" THEN
    SET outstring = CONCAT(outstring, CONVERT(utfstr USING utf8));
  END IF;

  RETURN outstring;
END@@
DELIMITER ;

このMySQL関数を配置すると、次のコマンドでテーブルを変換できます。

UPDATE `table_name` SET `column_name`=Unjson(`column_name`);

MySQL 5.5を使用していますが、5.0ではutf-16がサポートされていないと思います。そのため、MySQLのバージョンを確認する必要があるかもしれません...

(そうです、実稼働環境でこれを実行する前にバックアップを作成することをお勧めします...);)

于 2012-04-07T18:24:41.773 に答える