MySQL如何在一个字段中包含多个值mysql一个字段包含

一个字段包含多个值,以逗号分隔或采用 JSON 格式。

用逗号分隔:简单,但查询效率低。
例如,在“项目”表中,“标签”字段存储“技术、编程”。
检查“programming”时,使用LIKE“%programming%”,效率较差,扩展性弱。

JSON格式:适用于MySQL 5 .7 及以上版本。
Article表的tags字段存储了一个JSON数组['technology', 'programming']。
要检查“programming”,请使用 JSON_CONTAINS(tags,'programming'),它效率高且可扩展性良好。

除非旧系统尚未更新,否则对特定项目使用 JSON。
你自己掂量一下吧。

怎样从mysql数据库中读取数据,并保存到数组?

您的代码有一个小问题。
让我为你指出这一点。

首先,您在这里使用的 mysql_ 函数从 PHP 5 .5 开始已被弃用,从 PHP 7 .0 开始这些函数已被弃用并且根本不受支持。
推荐使用mysqli_或PDO进行数据库操作。

那么你的代码中有几个小细节需要注意:
1 . setnamesutf8 应该是SET NAMES utf8 ,大小写错误。
2 .您在get_data函数中使用@mysql_query来抑制错误消息。
这不是生产环境中的最佳实践,因为您可能会错过重要的错误消息。
您可以去掉@符号并查看查询结果。
3 . mysql_fetch_array还将返回一个包含错误信息的数组,您应该检查该数组。
4 . 使用mysql_free_result时,应传递$resultRows变量而不是$result。

下面是根据上述建议修改的代码:
php <?php 定义(“主机”,“本地主机”); 定义(“数据库”,“演示”); 定义(“DBUSER”,“根”); 定义(“DBPASSWD”,“mysql”);
$local_conn = mysqli_connect(HOST,DBUSER,DBPASSWD,DB); 如果(!$local_conn){ exit("连接失败:" .mysqli_connect_error());
mysqli_set_charset($local_conn, "utf8 ");
函数 get_data($conn, $name) { $sql = "从 t_demo WHERE time LIKE '%" 中选择。
$名称。
“%'”; $结果 = mysqli_query($conn, $sql); 如果(!$结果){ exit("查询失败:" .mysqli_error($conn)); } while ($trow = mysqli_fetch_array($result)) { $结果[] = $trow; } mysqli_free_result($结果); 返回$结果;
$results = get_data($local_conn, "测试"); ?>
请注意,这里的代码没有执行任何安全处理,例如使用准备好的语句来防止 SQL 注入。
这只是一个基本示例。
在实际应用中,应该考虑添加这些安全措施。

mysql中怎么存储数组?在线等!急!

说实话,我在做数据库存储的时候,特别担心如何将数组转换为字符串。
使用 implode() 时,您需要知道使用什么分隔符,以免它与数据合并。
我记得保存过一次用户帐户。
数组包含 ['tech', 'music', 'travel']。
我直接用逗号将它们分开,结果是字符串“tech,music,travel”。
如果用户添加了新帐户,则必须重写该字符串,这非常烦人。
后来,用 implode('|') 代替。
带有奇数符号“|”数据被清楚地分开。

有趣的是,当涉及到多维数组时,我最初对 implode() 很着迷。
',', ';'我尝试过使用它,也使用了‘,’|’之类的级别标签,但总觉得不够优雅。
直到我看到我以前的一个同事使用serialize()将整个数组直接包装成一个长字符串并存储在数据库中。
解压它并使用 unserialize() 解压它,无论它有多深,它都会恢复到原来的状态。
当时我就觉得这根本就是一个偷懒的技能。
手册上说serialize()会根据PHP版本和配置调整打包格式。
你必须注意这一点,否则他们的环境可能会出现问题。

我尝试使用sequence()来保存类似['user1 ' => ['name' => 'Alice', 'tags' => ['tech', 'art']], 'user2 ' => ['name' => 'Bob', 'tags' => ['sports']]的内容。
换行后的字符串超过6 0个字符,但解决方案仍然相同。
虽然serialize()生成的字符串可能比implode()长,但是省去了拆分和重新排序的麻烦,并且非常值得。

但是,有一个陷阱需要记住。
如果将来想要更改serialize()中存储的数据结构(例如添加字段),直接发出serialize()可能会遇到错误。
我曾经遇到过这种情况,当我将二维数组转换为一维数组时,输出在求解后立即崩溃。
因此,在使用serialize()之前应该清楚地考虑数据是否会长期保持不变。
对于临时存储或持久数据结构,使用带有特殊分隔符的 implode() 也很有用。

我自己没有尝试过,但我听说可以使用 json_encode() 和 json_decode() 进行 JSON 格式存储。
但PHP版本过低则不支持可以的,所以你应该检查一下手册。
当数据很大时,JSON 通常比 strings() 更容易、更快地解析。
但说实话,我仍然经常使用serialize()并诉诸包装器方法。