mysqldump如何将二进制数据写入MySQL逻辑备份文件?

时间:2017-02-08 08:42:23

标签: mysql c character-encoding

我使用mysqldump备份表。架构如下:

rightButtonItem

我可以使用以下命令备份表格中的数据。

mysqldump -uroot -p123456 tdb> dump.sql 即可。

现在我想使用MySQL c接口编写自己的代码来生成类似于dump.sql的文件。 所以我只是

  • 读取数据,并将其存储在int char * p中(使用函数mysql_fetch_row);
  • 使用fprintf将数据写入文件(f,"%s",p);

但是,当我检查写入文件的表字段时,我发现mysqldump和我自己的程序生成的文件是不同的。例如,

  • mysqldump生成的文件中的一个数据字段 CREATE TABLE `student` ( `ID` bigint(20) unsigned DEFAULT NULL, `DATA` varbinary(64) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  • 我的程序生成的文件中的一个数据字段 '[[ \\^X\í^G\ÑX` C;·Qù^Dô7<8a>¼!{<96>aÓ¹<8c> HÀaHr^Q^^½n÷^Kþ<98>IZ<9f>3þ'

所以,我的问题是:为什么使用sprintf(f,&#34;%s&#34;,xx)写备份数据不正确?是否只需添加&#39; &#39;在字符串的前端和末尾?如果是这样,那该字段的数据恰好具有&#39;在它?

另外,我想知道将一些不可打印的字符写入文本文件意味着什么。

另外,我看了stackoverflow.com/questions/16559086并尝试了 - hex-blob 选项。如果我将二进制数据的每个字节转换为十六进制格式然后将简单的文本字符串写入dump.sql,那是否可以。

然后,而不是得到 [[ \^Xí^GÑX` C;·Qù^Dô7<8a>¼!{<96>aÓ¹<8c> HÀaHr^Q^^½n÷^Kþ<98>IZ<9f>3þ 我有类似的东西 '[[ \\^X\í^G\ÑX` C;·Qù^Dô7<8a>¼!{<96>aÓ¹<8c> HÀaHr^Q^^½n÷^Kþ<98>IZ<9f>3þ' 所有角色现在都可以打印!

但是,如果我选择这种方法,我想知道当我使用latin1以外的其他编码方案时是否可以遇到问题。

此外,上述词语都是我自己的想法,我也想知道我还有其他方法可以使用C接口备份数据。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

latin1utf8等是CHARACTER SETs。它们适用于TEXTVARCHAR列, BLOBVARBINARY列。

使用--hex-blob是一个好主意。

如果你在TEXTCHAR中有“不可打印的字符”,那么要么你曾经试图将BLOB放入这样的 - 顽皮 - 或者打印机制没有设置为适当的charset。