我想知道这是否可行?将数组插入数据库中的一个字段.
例如,我有一个标题,我希望只有一个id的标题,但它将在网站上使用.
使另一个表具有全局ID,然后另一个表与实际标题链接到具有全局ID的表相比,感觉有点不必要.
我只想拥有这样的东西
ID TITLE 1 Array("english title", "nederlandse titel");
我正在使用PHP/MSYQL,所以如果它可行,请用这些语言解释.
哦,是的,我想我可以将它格式化,并使用split函数将其再次转换为数组.但是我想知道我是否可以立即将它存储为数组,我认为用户可能会输入具有相同格式的内容(百万分之一)
它是可行的:
$title = serialize($array);
然后解码:
$title = unserialize($mysql_data);
但正如所提到的,它首先真正减少了数据库的好处.我肯定建议使用多表或多列选项,具体取决于您希望支持的语言数量,以及该数字将来是否会发生变化.
编辑:dcousineau提到的一个好点(见评论)
有时,序列化输出,即使在转义之后,也会将字符抛入查询中,从而搞砸了.您可能希望将serialize()包装在base64_encode()调用中,然后在反序列化之前使用base64_decode().
调整了这些情况的代码:
$title = base64_encode(serialize($array) ); $title = unserialize(base64_decode($mysql_data) );
这里真的只有两个合理的选择:
加入另一个表
专业人士:无限制语言中的无限制标题
缺点:加入开销在计算上更加昂贵,SQL在更新/插入等方面稍微复杂一些
多列
例如:TITLE_EN,TITLE_NL,TITLE_DE
pros:快速插入,选择等
缺点:语言数量有限,添加更多是ALTER TABLE
鉴于我们的两个选择,你通常应该选择第一个.除非您只处理无法并行化的大量交易,否则您绝对可以确保您永远不会添加语言,从长远来看,架构布局的额外灵活性将为您节省麻烦.