MySQL中支持序列化數(shù)據(jù)類型,這個特性可以將一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為一個字符串來存儲。在很多情況下,這個特性可以簡化代碼,而且可以讓我們方便地存儲、查詢和更新這些數(shù)據(jù)。
CREATE TABLE `customer` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `address` BLOB NOT NULL, PRIMARY KEY (`id`) );
在上面的SQL語句中,我們定義了一個名為customer的表,其中address列的類型是BLOB。在這里,我們可以使用序列化數(shù)據(jù)類型將圖像、視頻和其他二進(jìn)制數(shù)據(jù)存儲在這個列中。
INSERT INTO `customer` (`name`, `address`) VALUES ('Tom', serialize(array('street' =>'1st Avenue', 'city' =>'New York')));
在上面的例子中,我們使用了PHP的serialize()函數(shù)來將一個數(shù)組轉(zhuǎn)化為一個字符串,并將其保存在address列中。在讀取這個數(shù)據(jù)時,我們可以使用unserialize()函數(shù)來將它重新轉(zhuǎn)化為一個數(shù)組。
SELECT `name`, `address` FROM `customer` WHERE `id` = 1;
當(dāng)我們讀取address列時,我們可以使用如下代碼來將其轉(zhuǎn)化為一個數(shù)組:
$record = mysql_fetch_assoc($result); $data = unserialize($record['address']);
注意,雖然序列化數(shù)據(jù)類型很方便,但同時也有一些缺點。因為它存儲的是一個字符串,所以對于特別大的數(shù)據(jù)結(jié)構(gòu),這個字符串的長度可能會非常大,這就會占用很多的空間。