如何在mysql数据库中编辑无效的UTF-8字符串

时间:2012-10-30 11:31:18

标签: mysql sql utf-8 phpmyadmin mediawiki

我的数据库中有一些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在每一行的末尾自动添加2e2e2e三个点 - 它们太长而无法显示。如果有人感兴趣,原始二进制数据

d09fd0a02035302e312e3031392d3230303020d09ed181d0bdd0bed0b2d0bdd18bd0b520d0bfd0bed0bbd0bed0b6d0b5d0bdd0b8d18f20d0b5d0b4d0b8d0bdd0bed0b920d181d0b8d181d182d0b5d0bcd18b20d0bad0bbd0b0d181d181d0b8d184d0b8d0bad0b0d186d0b8d0b820d0b820d0bad0bed0b4d0b8d180d0bed0b2d0b0d0bdd0b8d18f20d182d0b5d185d0bdd0b8d0bad0be2dd18dd0bad0bed0bdd0bed0bcd0b8d187d0b5d181d0bad0bed0b920d0b820d181d0bed186d0b8d0b0d0bbd18cd0bdd0bed0b920d0b8d0bdd184d0bed180d0bcd0b0d186d0b8d0b820d0b820d183d0bdd0b8d184d0b8d186d0b8d180d0bed0b2d0b0d0bdd0bdd18bd1

无论如何,这些字符串在行末端包含非utf符号,如

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

因为最后一个符号是 - 对我来说它似乎是黑色菱形,里面有白色问题,最后丢失了20-30个字符

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

正如Joni的评论所说,

  

“文本的长度正好是255个字节,这是a的限制   MySQL tinytext / tinyblob字段,也经常被程序员用作   varchar / varbinary的大小。它看起来像您的原始数据   被剪掉了。原始数据中的最后一个D1启动一个新的UTF-8   字符,但缺少第二个字节;这就是为什么最后一次   字符在转换后的文本中被破坏。“

在表[日志]字段[log_comment]的MediaWiki DB中,应该存储已更改的页面的标题。其中一些似乎长于255个符号,因此在记录时它们被剪裁。那让我困惑;我认为有一种数据库错误,所以我应该改变这些字符串 - 添加缺少符号。现在我看到它有点可能,所以我只能从其他领域收集必要的信息。

答案 2 :(得分:0)

试试这个:

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