首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么mysql要以相反的顺序保存json?如何修复它

问为什么mysql要以相反的顺序保存json?如何修复它
EN

Stack Overflow用户
提问于 2022-08-01 20:49:57
回答 1查看 145关注 0票数 0

这是在sql中插入json的代码。

代码语言:javascript
复制
function insert_ema($json){

$a= new Sql();
$b=$a->connection;
$sql = "INSERT INTO ema (ema_ten) VALUES ('$json')";

if ($b->query($sql) === TRUE) {
echo PHP_EOL." New record created successfully \n";
} else {
echo PHP_EOL." Error: " . $sql . "<br>" . $b->error;
}
$b->close();


;}

insert_ema('{"firstName":"John", "lastName":"Doe","3":"Jo", "4":"Do"}');

+----------------------------------------------------------------+----+
| ema_ten                                                        | id |
+----------------------------------------------------------------+----+
| {"3": "Jo", "4": "Do", "lastName": "Doe", "firstName": "John"} |  1 |
| {"3": "Jo", "4": "Do", "lastName": "Doe", "firstName": "John"} |  2 |
+----------------------------------------------------------------+----+

上面保存的sql是相反的顺序!!我怎样才能修好它?

我想要保持顺序的原因是,我希望能够将json转换为一个数组并使用pop。

我认为MySQL应该保存数组,并对这个问题进行排序。

EN

回答 1

Stack Overflow用户

发布于 2022-08-01 20:58:40

https://dev.mysql.com/doc/refman/8.0/en/json.html说:

为了提高查找效率,MySQL还对JSON对象的键进行排序。您应该注意到,这种排序的结果可能会发生更改,并且不能保证在各个版本之间保持一致。

这意味着您不应该依赖于JSON对象中键的任何特定排序顺序。JSON数组有顺序,但是JSON对象的键没有顺序。

如果JSON对象的键和各自的值相同,则JSON对象是相等的,不管顺序如何:

代码语言:javascript
复制
mysql> select cast('{"firstName":"John", "lastName":"Doe","3":"Jo", "4":"Do"}' as json) 
  = cast('{"3": "Jo", "4": "Do", "lastName": "Doe", "firstName": "John"}' as json) 
  as is_equal;
+----------+
| is_equal |
+----------+
|        1 |
+----------+

关于你的评论:

以上示例的要点是,您不能按预定顺序使MySQL存储密钥。MySQL的JSON实现并不能做到这一点。它重新排列JSON对象键,使其更有效地进行查找。你在这件事上没有发言权。

可以对JSON数组进行排序。因此,保留顺序的唯一选项是使用数组,其中数组的每个元素都是一个具有单个键的对象:

代码语言:javascript
复制
[{"firstName":"John"}, {"lastName":"Doe"}, {"3":"Jo"}, {"4":"Do"}]

我知道这不是您所要求的,而是您所要求的不能在MySQL中实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73199458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档