為什麼mysql以相反的順序保存json?如何修復它
P粉141925181
P粉141925181 2024-02-17 13:04:55
0
1
419

這是在我的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 中無法實現。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板