【问题标题】:MYSQL JSON column change array order after saving保存后MYSQL JSON列更改数组顺序
【发布时间】:2018-07-01 03:15:39
【问题描述】:

我在 MySQL 数据库表中使用 JSON 列类型。当我尝试在表列中保存 JSON 值时,JSON 数组会自动重新排序(随机播放)

我有以下 JSON:

{"TIMER_HEADER": [{"XX!TIMERHDR": "XXTIMERHDR", "VER": " 7", "REL": " 0", "COMPANYNAME": "XXX", "IMPORTEDBEFORE": "N", "FROMTIMER": "N", "COMPANYCREATETIME": "12423426"}, {"XX!HDR": "XXHDR", "PROD": "Qics for Wnows", "VER": "Version 6.0", "REL": "Release R", "IIFVER": "1", "DATE": "2018-01-20", "TIME": "1516520267",   "ACCNTNT": "N", "ACCNTNTSPLITTIME": "0"}], "COLUMN_HEADER": ["!TIMEACT", "DATE", "JOB", "EMP", "ITEM", "PITEM", "DURATION", "PROJ", "NOTE", "BILLINGSTATUS"]}

保存到MySql表的JSON-column后,变成:

{"TIMER_HEADER": [{"REL": " 0", "VER": " 7", "FROMTIMER": "N", "COMPANYNAME": "XXX", "XX!TIMERHDR": "XXTIMERHDR", "IMPORTEDBEFORE": "N", "COMPANYCREATETIME": "12423426"}, {"REL": "Release R", "VER": "Version 6.0", "DATE": "2018-01-20", "PROD": "Qics for Wnows", "TIME": "1516520267", "IIFVER": "1", "XX!HDR": "XXHDR", "ACCNTNT": "N", "ACCNTNTSPLITTIME": "0"}], "COLUMN_HEADER": ["!TIMEACT", "DATE", "JOB", "EMP", "ITEM", "PITEM", "DURATION", "PROJ", "NOTE", "BILLINGSTATUS"]}

我需要与原始订单相同的订单,因为有第 3 方验证。

请帮忙。谢谢。

【问题讨论】:

标签: mysql json mysql-json


【解决方案1】:

数组项在 MySQL JSON 列中的顺序不会改变,但对象键/值对可能会。

MySQL manual 说:

为了提高查找效率,它还对 JSON 对象的键进行排序。您应该注意,此排序的结果可能会发生变化,并且不能保证在不同版本之间保持一致。

没有标准规定它必须按特定顺序进行,因此最好的办法可能是与第 3 方的某人交谈以调整验证。

【讨论】:

  • 该死,我很高兴能使用这种新的列类型,但现在我知道键对值可能会改变顺序,这对我当前的需求毫无用处。
  • 我同意 Martin 的观点,这完全打破了很多用例;尤其是 LIKE 比较。
  • 您可以将列的类型更改为 TEXT 并仍然获得 JSON 解析的能力,而且在这种情况下,mysql 不会更改顺序。
  • 有没有其他方法可以解决这个订单问题?喜欢添加 id 或 order 序列?
  • @KevinLeary 我支持。
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多