MySQL中支持序列化數據類型,這個特性可以將一個復雜的數據結構轉化為一個字符串來存儲。在很多情況下,這個特性可以簡化代碼,而且可以讓我們方便地存儲、查詢和更新這些數據。
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。在這里,我們可以使用序列化數據類型將圖像、視頻和其他二進制數據存儲在這個列中。
INSERT INTO `customer` (`name`, `address`) VALUES ('Tom', serialize(array('street' =>'1st Avenue', 'city' =>'New York')));
在上面的例子中,我們使用了PHP的serialize()函數來將一個數組轉化為一個字符串,并將其保存在address列中。在讀取這個數據時,我們可以使用unserialize()函數來將它重新轉化為一個數組。
SELECT `name`, `address` FROM `customer` WHERE `id` = 1;
當我們讀取address列時,我們可以使用如下代碼來將其轉化為一個數組:
$record = mysql_fetch_assoc($result); $data = unserialize($record['address']);
注意,雖然序列化數據類型很方便,但同時也有一些缺點。因為它存儲的是一個字符串,所以對于特別大的數據結構,這個字符串的長度可能會非常大,這就會占用很多的空間。