mysql中数组的数据类型

时间:2012-08-11 11:49:39

标签: php mysql arrays blob

我有一个类型数组的变量,我想将它存储在数据库(mysql)中,当我应用tinyblob时,我通常在java中用于显示它返回异常输出。 那么php中数组的正确数据类型是什么。

$countryGoup=array("USA","FRANCE","GERMANY","BRITAIN");

1 个答案:

答案 0 :(得分:12)

你可以:

1)如果值很少且固定

,则使用SET数据类型

您将CREATE TABLE语句中的列定义为SET('USA', 'France', 'Germany', ...) NOT NULL(非null可选),并使用以下查询:

INSERT INTO myTable SET countries="USA,Germany";

2)使用带有外部引用的查找表

所以你定义了一个countries表:

id_country|name
----------+-----------
1         |USA
2         |Germany
3         |France

并定义一个数据透视表,将您的主要对象(例如“用户”)与国家/地区相关联,从而实现多对多关系

F.ex。,users_countries表将以这种方式将users表链接到countries表:

id_user|id_country
------------------
1      |1
1      |2
2      |1

在此示例中,用户1链接到ID为1和2(美国和德国)的国家/地区,用户2仅链接到美国,依此类推


3)使用逗号分隔的字符串或其他分隔符,或序列化数组

这涉及使用服务器端语言(在您的情况下为PHP)将值与某些分隔符(例如逗号,或管道|)连接起来:

$countries = array("USA", "Russia", "Iran");
$countriesString = implode (",", $countries); // $countriesString = "Usa,Russia,Iran"
$query = "INSERT INTO mytable SET countries = '" . $countriesString . "'";
  

(注意:字符串值不会出于示例目的而被转义,但这不是一个好习惯)

当您从数据库中检索值时,您将检索放入的字符串,并再次获取一个$array = explode(",", $retrievedValueFromDb)的数组,从而提供相同的分隔符。

<强>更新

4)检索值find_in_set()MySQL函数

如果字符串出现在逗号分隔值字段中,您还可以依赖find_in_set(needle, field)函数返回大于零的整数。

因此,如果您使用方法1)并且拥有类似"USA,Germany"的字符串字段,则可以使用以下内容获取USA所在的列:

SELECT * FROM myTable WHERE find_in_set('USA', countries) <> 0

方法1)如果你有很少的固定值,也很容易查询。缺点是您必须限制为64个值,必须修复这些值,并且不能包含逗号(,),因为它用作分隔符。

方法2)是最标准化和正确的,它也是规范化和查询效率

方法3)很简单,但需要额外的处理,而且SQL不那么容易

如其他地方所述,dbms中没有“数组”数据类型,您必须使用一些解决方法。