处理大数据类型
二进制类型
Vastbase G100提供两种不同的方法存储二进制数据。 二进制数据可以使用二进制数据类型 BYTEA存储在表中,或者使用大对象特性以一种特殊的格式将二进制数据存储在一个独立的表中, 然后通过在表中保存一个类型为 OID 的值来引用该表。
BYTEA插入记录
插入二进制数据,需将二进制数据转为二进制流,该流作为第二个参数传给bindParam()方法,并且指定数据类型为PDO::PARAM_LOB。使用BYTEA类型存储二进制数据,例如:
<?php
try {
$conn = new PDO(“pgsql:host=172.16.19.117;port=5432;dbname=vastbase”,”vbadmin”,”vbase@admin”);
$sql = "insert into hzy.t2 values(?)";
$fp = fopen(“/tmp/a.png”, “rb”);
$stmt->bindParam(1, $fp, PDO::PARAM_LOB);
$stmt->execute();
$conn = null;
} catch(Exception $e) {
print $e->getMessage();
die();
}
?>
// 最终可以从数据库中查询到图片成功插入
BYTEA读取记录
查询二进制数据类型字段数据时,先预编译SQL后执行,再通过bindColumn()方法绑定列,调用fetch(PDO::FETCH_BOUND)将数据转成二进制流到bindColumn方法的第二个参数中。
<?php
try {
$conn = new PDO(“pgsql:host=172.16.19.117;port=5432;dbname=vastbase”,”vbadmin”,”vbase@admin”);
$sql = "select bytea_field from hzy.t2";
$stmt->prepare($sql);
$stmt->execute();
$stmt->bindColumn(1, $bytea, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
file_put_contents(“/tmp/b.png”, $bytea, true);
$conn = null;
} catch(Exception $e) {
print $e->getMessage();
die();
}
?>
// 最终可以在/tmp目录下查看到读取出来的图片b.png
字符类型
Vastbase G100中TEXT类型与VARCHAR类型都是可变长的字符类型,区别在于VARCHAR类型通过VARCHAR(n)中的n来限制最大长度,而TEXT类型没有。TEXT类型与VARCHAR类型几乎没有性能差别,TEXT类型最多可存储1G数据 。使用TEXT类型存储数据时,可用以下方式来进行读写。例如:
CREATE TABLE images (id int, msg text);