Php 如何从mysql数据库中的序列化字段进行搜索?

Php 如何从mysql数据库中的序列化字段进行搜索?,php,mysql,sql,serialization,Php,Mysql,Sql,Serialization,除了类似mysql的语句外,我如何从mysql数据库中的serialize字段进行搜索 数据如下: a:9:{s:2:"m1";s:4:"1217";s:2:"m2";s:8:"9986-961";s:2:"m3";s:19:"1988-03-07 00:00:00";s:2:"m4";s:0:"";s:2:"m5";s:0:"";s:2:"m6";s:0:"";s:2:"m7";s:3:"104";s:2:"m8";s:6:"150000";s :2:"m9";s:18:"Ok Then, Y

除了类似mysql的语句外,我如何从mysql数据库中的serialize字段进行搜索

数据如下:

a:9:{s:2:"m1";s:4:"1217";s:2:"m2";s:8:"9986-961";s:2:"m3";s:19:"1988-03-07 00:00:00";s:2:"m4";s:0:"";s:2:"m5";s:0:"";s:2:"m6";s:0:"";s:2:"m7";s:3:"104";s:2:"m8";s:6:"150000";s :2:"m9";s:18:"Ok Then, Yes It Is";}
我需要m9值为“是的”的行。我不想使用mysql的“like”语句

我试过:

SELECT * FROM table WHERE field like '%Yes It Is%'

请帮忙。

您是否尝试过以下方法:

SELECT * FROM table WHERE field like '%"m9";s:18:"Ok Then, Yes It Is";%'
?


但事实上,如果您想搜索这些数据,您应该简单地创建适当的表结构,不要将所有序列化数据放在一列中

为什么不使用
LIKE
子句?MySQL不了解PHPs序列化格式。像这样的
是你唯一的选择。解决方案:将存储字段拆分为单独的列,因为您希望用SQL分别查询它们。假设在同一行m8和m9中,两个值都是“Yes It is”。但是我想要m9值为“Yes It is”的行,而不是m8值。对于大型数据集,对此类列使用
LIKE
可能会非常慢。值得注意的是,Postgres支持原生JSON数据,从长远来看,这可能是一个更好的解决方案。查询JSON文档的特定属性非常快,JSON是一种非常好的通用序列化格式?like不匹配。如果答案
Ok,则答案是肯定的
完全相同,每次都应该有
s:18
。您可以使用其他代码进行尝试,例如:
$x['m9']='Ok Then,Yes it Is';echo序列化($x)
得到
a:1:{s:2:m9;s:18:“好的,那么它是”}
您不能以其他方式执行此操作,因为您有一个长字符串,并且希望在该字符串中搜索。如果您不喜欢,您应该在数据库列“m9”中创建一个简单的值,例如“Ok Then,Yes It Is”,然后您可以使用
=
运算符进行搜索。否则就不可能了