gpt4 book ai didi

php - mysql中数组的数据类型

转载 作者:可可西里 更新时间:2023-11-01 06:58:58 24 4
gpt4 key购买 nike

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

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

最佳答案

你可以:

1) 如果值很少且固定,则使用 SET 数据类型

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

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

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

所以你定义了一个countries表:

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

并定义一个数据透视表,将您的主要对象(例如“用户”)链接到国家/地区,从而建立多对多关系

例如,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 . "'";

(Note: the string value is not escaped for example purpose, but it is not a good practice)

当您检索数据库中的值时,您检索了您放入的字符串,并使用$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 中没有“数组”数据类型,您必须使用一些解决方法。

关于php - mysql中数组的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com