为什么mysql以相反的顺序保存json?如何修复它
P粉141925181
P粉141925181 2024-02-17 13:04:55
0
1
341

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

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应该保存数组并对这个问题进行排序。

P粉141925181
P粉141925181

全部回复(1)
P粉090087228

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

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

如果 JSON 对象的键和各自的值相同,则无论顺序如何,它们都是相等的:

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 数组可以排序。因此,保留顺序的唯一选择是使用数组,其中数组的每个元素都是具有单个键的对象:

[{"firstName":"John"}, {"lastName":"Doe"}, {"3":"Jo"}, {"4":"Do"}]

我知道这不是您所要求的,但您所要求的在 MySQL 中无法实现。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!