1

データベースにいくつかの utf-8 文字列があり、それらは varbinary として保存されています。(通常、これは mediawiki データベースですが、それは重要ではないと思います)。一部の文字列の形状が良くないことがわかりました。

SELECT  log_comment, CONVERT( log_comment
USING utf8 ) AS 
COMMENT 
FROM  `logging` 
WHERE log_id = %somevalue%

私はこのようにphpmyadminに出力テーブルを持っています:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| d093d09ed0a1d0a220d0a020d098d0a1d09e2fd09cd0add09a20393239342d39332e20c2abd098d0bdd184d0bed180d0bcd0b0d186d0b8d0bed0bdd0bdd0b0d18f20d182d0b5d185d0bdd0bed0bbd0bed0b3d0b8d18f2e2e2e    |NULL |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

必要なのは、この文字列を読み取れるようにするか、正しいデータで新しい文字列をアップロードすることです。しかし、これは varbinary フィールドです。その中のデータを管理するにはどうすればよいですか?

UPD: phpmyadmin が各行の末尾にある 3 つのドットに対して 2e2e2e を自動的に追加したことがわかりました - それらは長すぎて表示できませんでした。元のバイナリ データは、興味のある方は、

d09fd0a02035302e312e3031392d3230303020d09ed181d0bdd0bed0b2d0bdd18bd0b520d0bfd0bed0bbd0bed0b6d0b5d0bdd0b8d18f20d0b5d0b4d0b8d0bdd0bed0b920d181d0b8d181d182d0b5d0bcd18b20d0bad0bbd0b0d181d181d0b8d184d0b8d0bad0b0d186d0b8d0b820d0b820d0bad0bed0b4d0b8d180d0bed0b2d0b0d0bdd0b8d18f20d182d0b5d185d0bdd0b8d0bad0be2dd18dd0bad0bed0bdd0bed0bcd0b8d187d0b5d181d0bad0bed0b920d0b820d181d0bed186d0b8d0b0d0bbd18cd0bdd0bed0b920d0b8d0bdd184d0bed180d0bcd0b0d186d0b8d0b820d0b820d183d0bdd0b8d184d0b8d186d0b8d180d0bed0b2d0b0d0bdd0bdd18bd1

とにかく、これらの文字列には、行末に非 utf シンボルが含まれています。

SELECT log_comment,CAST(log_comment AS CHAR CHARACTER SET utf8) AS COMMENT
FROM  `logging` 
WHERE log_id = %somevalue%

最後の記号は � - 私にとっては、黒いひし形に白い疑問符が入っているように見え、最後の 20 ~ 30 文字が欠落しているためです。

4

3 に答える 3

2
SELECT log_comment,CAST(log_comment AS CHAR CHARACTER SET utf8) AS COMMENT
FROM  `logging` 
WHERE log_id = %somevalue%
于 2012-10-30T12:22:55.960 に答える
1

ジョニのコメントで言われたように、

「テキストの長さは正確に255バイトです。これはMySQLtinytext/ tinyblobフィールドの制限であり、プログラマーはvarchar/varbinaryのサイズとしてもよく使用します。元のデータがクリップされているようです。最後のD1元のデータでは、新しいUTF-8文字が開始されますが、2番目のバイトが欠落しています。そのため、変換されたテキストの最後の文字が壊れています。」

テーブル[logging]のフィールド[log_comment]のMediaWikiDBには、変更されたページのヘッダーが保存されている必要があります。それらのいくつかは255シンボルより長いように見えたので、ログに記録されている間、それらはクリップされました。それは私を混乱させました。ある種のデータベースエラーがあると思ったので、それらの文字列を変更する必要があります-欠落している記号を追加します。今は少し可能だと思いますので、他の分野から必要な情報を集めることができます。

于 2013-03-06T14:00:10.223 に答える
0

これを試して:

SELECT  log_comment, 
        CONVERT(log_comment,VARCHAR(65535)) AS COMMENT 
FROM  `logging` 
WHERE log_id = %somevalue%
于 2012-10-30T11:47:48.457 に答える