各位大虾,我这段时间一直在弄用mysql存储doc和html文件,总是出现问题。过程如下,请各位大虾帮忙。//创建表
mysql> create table test(id int not null,context blob not null);
Query OK, 0 rows affected (0.09 sec)//存储文件
mysql> insert into test(id,context) values(1,load_file("d:/a.doc"));
Query OK, 1 row affected (0.03 sec)mysql> insert into test(id,context) values(2,load_file("d:/a.htm"));
Query OK, 1 row affected (0.03 sec)//查询并保存文件
当我用mysql> select context from test where id=1(或者id=2)查询保存的文件内容的时候,查询出来的结果前面和后面都有很多的------如果用如下语句保存的文件时,doc文件无法打开,htm文件用ie打开后前面有很多空行。
mysql> select context from test where id=1 into outfile "d:/a2.doc";
Query OK, 1 row affected (0.03 sec)mysql> select context from test where id=2 into outfile "d:/a2.htm";
Query OK, 1 row affected (0.02 sec)这个问题已经困扰我很长时间了,请问各位老大如何解决。

解决方案 »

  1.   

    BLOB是二进制内容,不能由 select context得到,你需要通过程序来得到二进制流。
      

  2.   

    相反的,当编写输出值时,默认值会使SELECT...INTO OUTFILE按如下方式运行:·         在字段之间写入制表符。·         不把字段包含在任何引号字符中。·         当字段值中出现制表符、新行或‘\’时,使用‘\’进行转义。·         在行的末端写入新行。
    它与load data infile是对应的,想想,多了这么多控制符,当然内容不一样了。所以,你的解决办法应该是去除这些限制。mysql> select binary context from test where id=1 into outfile 'c:/output.doc' fields TERMINATED BY '' escaped by '' LINES TERMINATED BY '';这样就能去除默认的几个控制符转义。你再试试。
      

  3.   

    to:ACMAIN_CHM请问如何用程序做,我一直是使用mysql的client直接在命令行做的。
    to:iihero
     
    按照你的方法,确实导出的文件可以打开使用了,但是文件的大小却变化很多,我的a.doc文件是39K,但是导出的是64K,而且按照你的方法导出的a。htm文件还是有问题,大小也还是64K。请问这个怎么解决。
      

  4.   

    怎么会,我用的是mysql5.5, 导入的doc是58880字节,导出时仍然是58880字节。难道跟字符集有关系?
    mysql> show variables like 'char%';
    +--------------------------+--------------------------------------+
    | Variable_name            | Value                                |
    +--------------------------+--------------------------------------+
    | character_set_client     | gbk                                  |
    | character_set_connection | gbk                                  |
    | character_set_database   | utf8                                 |
    | character_set_filesystem | binary                               |
    | character_set_results    | gbk                                  |
    | character_set_server     | utf8                                 |
    | character_set_system     | utf8                                 |
    | character_sets_dir       | D:\mysql-5.5.8-win32\share\charsets\ |
    +--------------------------+--------------------------------------+
    8 rows in set (0.00 sec)mysql> show variables like '%version%';
    +-------------------------+------------------------------+
    | Variable_name           | Value                        |
    +-------------------------+------------------------------+
    | innodb_version          | 1.1.4                        |
    | protocol_version        | 10                           |
    | slave_type_conversions  |                              |
    | version                 | 5.5.8                        |
    | version_comment         | MySQL Community Server (GPL) |
    | version_compile_machine | x86                          |
    | version_compile_os      | Win32                        |
    +-------------------------+------------------------------+
    7 rows in set (0.00 sec)mysql> insert into test values(2, load_file('c:/test.doc'));
    Query OK, 1 row affected (0.05 sec)mysql> select length(context) from test where id=2;
    +-----------------+
    | length(context) |
    +-----------------+
    |           58880 |
    +-----------------+
    1 row in set (0.00 sec)mysql> select binary context from test where id=2 into outfile 'c:/test_out.doc' fields TERMINATED BY '' escaped by '' LINES TERMINATED BY '';
    Query OK, 1 row affected (0.02 sec)mysql>看test_out.doc,仍然是58880字节。没有问题。
      

  5.   

    mysql> show variables like "char%";
    +--------------------------+----------------------------------------------------
    -----+
    | Variable_name            | Value
         |
    +--------------------------+----------------------------------------------------
    -----+
    | character_set_client     | utf8
         |
    | character_set_connection | utf8
         |
    | character_set_database   | utf8
         |
    | character_set_filesystem | binary
         |
    | character_set_results    | utf8
         |
    | character_set_server     | utf8
         |
    | character_set_system     | utf8
         |
    | character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.1\share\chars
    ets\ |
    +--------------------------+----------------------------------------------------
    -----+
    8 rows in set (0.05 sec)
    mysql> show variables like '%version%';
    +-------------------------+------------------------------+
    | Variable_name           | Value                        |
    +-------------------------+------------------------------+
    | protocol_version        | 10                           |
    | version                 | 5.1.51-community             |
    | version_comment         | MySQL Community Server (GPL) |
    | version_compile_machine | ia32                         |
    | version_compile_os      | Win32                        |
    +-------------------------+------------------------------+
    5 rows in set (0.00 sec)
    mysql> select length(context) from test where id=2;
    +-----------------+
    | length(context) |
    +-----------------+
    |           36675 |
    +-----------------+
    1 row in set (0.00 sec)
    查询到的也是36K。
    mysql> select binary context from test where id=2 into outfile 'c:/test_out.doc'
     fields TERMINATED BY '' escaped by '' LINES TERMINATED BY '';
    Query OK, 1 row affected (0.00 sec)
    导出来的确实64K
      

  6.   

    我重新使用5.1.54版试了一下,依然没有问题。导入导出以后:
     Directory of c:\02/19/2011  10:53 PM            58,880 test.doc
    02/27/2011  11:36 PM            58,880 test_out.doc
    02/27/2011  04:59 PM            58,880 test_out1.doc
                   3 File(s)        176,640 bytes
                   0 Dir(s)  28,935,954,432 bytes free
    一个字节不差的。
      

  7.   

    难道是字符编码的问题,可是我的htm文件导出来也是64K啊,而且htm文件还不可以正常使用、
      

  8.   

    出现乱马的问题我好像解决了,就是编码的问题,原来的文件都是我从别的电脑上拷过来的,html文件也会出现很多乱马,现在我在自己电脑上生成文件,然后保存,阅读就没有问题,但是还是导出的所有文件都是64K,是不是按照blob的最大大小导出的呢。
      

  9.   

    如果是这样,可能跟你的mysql设置参数有关系。
      

  10.   

    问题已解决,后面只要加上field escaped by '' 导出的文件大小就是正确的。
    已经结贴。