Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql中数组的数据类型_Php_Mysql_Arrays_Blob - Fatal编程技术网

Php mysql中数组的数据类型

Php mysql中数组的数据类型,php,mysql,arrays,blob,Php,Mysql,Arrays,Blob,我有一个数组类型的变量,我想将它存储在数据库(mysql)中,当我应用tinyblob时(我通常在java中使用tinyblob来显示),它会返回异常输出。 那么php中数组的正确数据类型是什么呢 $countryGoup=array("USA","FRANCE","GERMANY","BRITAIN"); 你可以: 1) 如果值很少且固定,则使用SET数据类型 您可以将CREATE TABLE语句中的列定义为SET('USA'、'France'、'Germany'、…)NOTNULL(NOT

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

$countryGoup=array("USA","FRANCE","GERMANY","BRITAIN");
你可以:

1) 如果值很少且固定,则使用SET数据类型 您可以将
CREATE TABLE
语句中的列定义为
SET('USA'、'France'、'Germany'、…)NOTNULL
(NOTNULL可选),并使用如下查询:

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

2) 使用具有外部引用的查找表 因此,您定义了一个
国家
表:

id_country|name
----------+-----------
1         |USA
2         |Germany
3         |France
并定义一个将主要对象(例如“用户”)链接到国家/地区的透视表,从而实现多对多关系

例如,
users\u countries
表将
users
表链接到
countries
表,方式如下:

id_user|id_country
------------------
1      |1
1      |2
2      |1
在此示例中,用户1链接到id为1和2的国家(美国和德国),用户2仅链接到美国,依此类推


3) 使用逗号分隔的字符串或其他分隔符,或序列化数组 这涉及到使用服务器端语言(在您的例子中是PHP)使用一些分隔符(例如逗号
或管道
|
)来压缩值:

(注意:例如,字符串值不会转义,但这不是一种好的做法)

当您从数据库中检索值时,您将检索输入的字符串,并再次获得一个数组,该数组使用
$array=explode(“,”,$retrievedValueFromDb)
,提供相同的分隔符

更新:

4) 检索值在\u set()MySQL函数中查找\u 您还可以依赖
find_in_set(needle,field)
函数,如果字符串出现在逗号分隔的值字段中,该函数将返回大于零的整数

因此,如果您使用方法1)并有一个字符串字段,如
“USA,Germany”
,您可以通过使用以下命令获得出现
USA
的列:

SELECT * FROM myTable WHERE find_in_set('USA', countries) <> 0
从myTable中选择*,其中查找集合(“美国”,国家/地区)0

方法1)在固定值很少的情况下有效,查询也非常容易。缺点是您被限制为64个值,这些值必须是固定的,并且不能包含逗号(,)作为分隔符

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

方法3)很简单,但需要额外的处理,对于SQL来说并不容易


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

我想要的数据类型是用于在数据库中保存数组的列的数据类型是,但mysql中没有“array”数据类型。你必须求助于这些变通办法之一。
SELECT * FROM myTable WHERE find_in_set('USA', countries) <> 0