7.3.7.2 BLOB和TEXT类型
一个BLOB是一个能保存可变数量的数据的二进制的大对象。4个BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在他们能保存值的最大长度方面有所不同。见7.3.1 列类型存储需求。 4个TEXT类型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT对应于4个BLOB类型,并且有同样的最大长度和存储需求。在BLOB和TEXT类型之间的唯一差别是对BLOB值的排序和比较以大小写敏感方式执行,而对TEXT值是大小写不敏感的。换句话说,一个TEXT是一个大小写不敏感的BLOB。 如果你把一个超过列类型最大长度的值赋给一个BLOB或TEXT列,值被截断以适合它。 在大多数方面,你可以认为一个TEXT行列是你所希望大的一个VARCHAR列。同样,你可以认为一个BLOB列是一个VARCHAR BINARY列。差别是: 用MySQL版本3.23.2和更新,你能在BLOB和TEXT列上索引。更旧的MySQL版本不支持这个。 
当值被存储时,对BLOB和TEXT列没有拖后空格的删除,因为对VARCHAR列有删除。 
BLOB和TEXT列不能有DEFAULT值。 
MyODBC定义BLOB为LONGVARBINARY,TEXT值为LONGVARCHAR。 因为BLOB和TEXT值可以是非常长的,当使用他们时,你可能遇到一些限制: 如果你想要在一个BLOB或TEXT列上使用GROUP BY或ORDER BY,你必须将列值变换成一个定长对象。这样做的标准方法是用SUBSTRING函数。例如: 
mysql> select comment from tbl_name,substring(comment,20) as substr ORDER BY substr;如果你不这样做,在排序时,只有列的首max_sort_length个字节被使用,缺省的max_sort_length是1024;这个值能在启动mysqld服务器时使用-O选择改变。你可以在包含BLOB或TEXT值得一个表达式上分组(group),通过指定列的位置或使用一个别名: mysql> select id,substring(blob_col,1,100) from tbl_name
           GROUP BY 2;
mysql> select id,substring(blob_col,1,100) as b from tbl_name
           GROUP BY b;一个BLOB或TEXT对象的最大尺寸由其类型决定,但是你能在客户与服务器之间是实际传输的最大值由可用的内存数量和通讯缓冲区的大小来决定。你能改变消息缓冲区大小,但是你必须在服务器和客户两端做。见10.2.3 调节服务器参数。 
注意,每个BLOB或TEXT值内部由一个独立分配的对象表示。这与所有的其他列类型相反,它们是在打开表时,按列被分配一次存储。

解决方案 »

  1.   

    列类型                  需要的存储量  
    TINYBLOB, TINYTEXT      L+1 字节, 在此L< 2 ^ 8 
    BLOB, TEXT              L+2 字节, 在此L< 2 ^ 16 
    MEDIUMBLOB, MEDIUMTEXT  L+3 字节, 在此L< 2 ^ 24 
    LONGBLOB, LONGTEXT      L+4 字节, 在此L< 2 ^ 32 
      

  2.   

    打算用longblob存放正文,但似乎无法输入表格,该怎么解决呢?
    有没有好的解决方案?
      

  3.   

    输入表格?
    用什么方式?如果是输入excel的话(windsow下),那牵扯到了com 比较麻烦看一下http://tech521.com/show_data.asp?tid=1690
    如果是用表单提交的话用base64_encode处理一下提交的变量,输出是用base64_decode处理一下
      

  4.   

    比如希望新闻显示的时候能显示表格,但在longblob里好像不能输入表格。
    longblob是用表单提交给处理程序的,并存放到数据库中。
      

  5.   

    longblob应该支持html标记的字符串,我已经成功过,你看看是不是程序的问题。