我的数据库中有一些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个字符
答案 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%