保存后MYSQL JSON列更改数组顺序
Posted
技术标签:
【中文标题】保存后MYSQL JSON列更改数组顺序【英文标题】:MYSQL JSON column change array order after saving 【发布时间】: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 方验证。
请帮忙。谢谢。
【问题讨论】:
也许这个答案会帮助某人https://***.com/a/61519255/10579735 【参考方案1】:数组项在 MySQL JSON 列中的顺序不会改变,但对象键/值对可能会。
MySQL manual 说:
为了提高查找效率,它还对 JSON 对象的键进行排序。您应该注意,此排序的结果可能会发生变化,并且不能保证在不同版本之间保持一致。
没有标准规定它必须按特定顺序进行,因此最好的办法可能是与第 3 方的某人交谈以调整验证。
【讨论】:
该死,我很高兴能使用这种新的列类型,但现在我知道键对值可能会改变顺序,这对我当前的需求毫无用处。 我同意 Martin 的观点,这完全打破了很多用例;尤其是 LIKE 比较。 您可以将列的类型更改为 TEXT 并仍然获得 JSON 解析的能力,而且在这种情况下,mysql 不会更改顺序。 有没有其他方法可以解决这个订单问题?喜欢添加 id 或 order 序列? @KevinLeary 我支持。以上是关于保存后MYSQL JSON列更改数组顺序的主要内容,如果未能解决你的问题,请参考以下文章