我甚至不知道是否将其称为序列化列是正确的,但我将解释自己,例如,我有一个用户表,我想存储用户的电话号码(手机,家庭,办公室等)所以,我想为每个数字类型创建一个列,但同时我想到了一个想法,如果我在一个列中保存一个json字符串,那么,我将永远不会有一个列可能将永远不会被使用,我可以在从数据库中读取数据时将该字符串转换为PHP数组,但我想听听这种做法的商品和坏处,也许这只是一个坏主意,但首先我想知道是什么其他人不得不说
谢谢
简答,多列.
答案很长:
为了爱世界上所有圣洁的人,请不要在单个文本列中存储多个数据集
我假设你将有一张桌子
+------------------------------+ +----------------------+ | User | cell | office | home | OR | User | JSON String | +------------------------------+ +----------------------+
首先,我会说这两种解决方案都不是最好的解决方案,但如果你要从两者中选择第一种解决方案是最好的.主要有几个原因,但具体修改和查询的能力非常重要.想想algrothim修改第二个选项.
SELECT `JSON` FROM `table` WHERE `User` = ? Then you have to do a search and replace in either your server side or client side language Finally you have to reinsert the JSON string
现在想想第一个解决方案.
SELECT * FROM `table` WHERE `User` = ? Then you can do a simple JSON encode to send it down To modify you only need one Query. UPDATE `table` SET `cell` = ? WHERE `User` = ? to update more than one its again a simple single query UPDATE `table` SET `cell` = ?,`home` = ? WHERE `User` = ?
这显然更好,但并不是最好的
还有第三种解决方案假设您希望用户能够插入无限数量的电话号码.
让我们使用关系表,所以现在有两个表.
+-------------------------------------+ +---------+ | Phone | | Users | +-------------------------------------+ +---------+ | user_name| phone_number | type | | U_name | +-------------------------------------+ +---------+
现在,您可以通过连接查询表
选择用户.,电话.来自电话,用户WHERE phone.user_name =? AND Users.U_name =?
插入也很简单,类型检查也很容易.