Поддержка MySQL JSON (1) — тип данных JSON
Поддержка MySQL JSON (1) — тип данных JSON

Официальная ссылка на документ:13.5 The JSON Data Type

MySQL При поддержке RFC 7159 родной, как определено JSON Тип данных, посредством которого можно обеспечить эффективный доступ. JSON(JavaScript Обозначение объекта) данных в документе. с общим JSON Строки формата хранятся в строковых столбцах по сравнению с JSON. Типы данных предоставляют следующие преимущества:

  • Автоматическая проверкахранилищесуществовать JSON в столбцеиз JSON Документация, недействительная документация приведет к ошибке.
  • оптимизацияизхранилище Формат。хранилищесуществовать JSON в столбцеиз JSON Документ преобразуется во внутренний формат, обеспечивающий быстрый доступ для чтения к элементам документа. Когда сервер читает в этом двоичном формате хранилищеиз JSON ценить, нет необходимости анализировать ценит из текстовой поверхности. Бинарный формат структуры позволяет передавать сервер напрямую через ключ. или множество нижнего индекса, чтобы найти подобъекты или вложенные ценить, не читая их в документе. Изперед или Изпослеизвсе ценить.

MySQL 8.0 До сих пор используется в Китае JSON_MERGE_PATCH() Поддержка функций RFC 7396 определено в JSON Merge Patch Формат。Посмотреть этофункцияизописывать,а также“JSON Достойная нормализация、слитьи Автоматическая упаковка”,для примеров и дополнительной информации.

Примечание. В этом обсуждении используется монотипный шрифт JSON для представления типа данных JSON, а для представления данных JSON используется обычный шрифт «JSON».

хранилище JSON Место, необходимое для документа, такое же, как и LONGBLOB или LONGTEXT примерно то же самое;Более подробную информацию можно найти в“Раздел 13.7 тип данныххранилище Требовать”。важныйиздапомнить,хранилищесуществовать JSON любой в столбце JSON Размер документа не может превышать max_allowed_packet Значение системной переменной. (Когда сервер работает внутри памяти JSON значение, JSON Значение может быть больше,чем max_allowed_packet значение это ограничение применяется к парам серверов; JSON Достойныйхранилище。)Можетиспользовать JSON_STORAGE_SIZE() функцияполучатьхранилище JSON Обратите внимание на объем места, требуемого для документа; JSON столбец, размер хранилищакосмос и размер этой функции возвращают изценить, дасуществовать до того, как на нем будет выполнено какое-либо частичное обновление Из размера столбцаиспользоватьизхранилище (см. далее в этом разделе) JSON Обсуждение некоторых обновленных оптимизаций).

До MySQL 8.0.13 столбцы JSON не могли иметь значения по умолчанию, отличные от NULL.

удалять JSON Помимо типов данных существует еще набор SQL функция может быть использована для JSON ценить за эксплуатацию,Такие как создать, модификацию ипоиск. Некоторые примеры связанных операций показаны ниже. Подробная информация о каждой отдельной функциииз,Видеть“Раздел 14.17 Функции JSON”。

Также есть группа для GeoJSON ценить за эксплуатациюизкосмосфункция。Видеть“Раздел 14.16.11 космос GeoJSON функция”。

Как и другие столбцы двоичного типа, вы не можете напрямую JSON столбец, но вы можете создать индекс для сгенерированного столбца и использовать этот индекс для JSON в столбцеизвлекатьскалярценить.Подробные примеры,Видеть“индексгенерироватьстолбец для предоставления JSON индекс столбца”。

Оптимизатор MySQL также ищет совместимые индексы для виртуальных столбцов, соответствующих выражению JSON.

существовать MySQL 8.0.17 и более поздние версии, InnoDB хранилищедвигательподдерживать JSON множествоначальствоиз Множественный индекс цен。Видеть“Множественный индекс цен”。

MySQL NDB Cluster 8.0 поддерживать JSON сумма столбца MySQL JSON функция,включатьсуществовать JSON Создание индекса для сгенерированного столбца столбца, чего нельзя сделать для JSON Решение для создания индексов непосредственно по столбцам. каждый NDB поверхностьбольшинствоподдерживать 3 индивидуальный JSON Список.

1. Частичное обновление значения JSON.

В существующем MySQL 8.0 оптимизатор может частично обновлять столбцы JSON вместо удаления старых документов и последующей записи всех новых документов в Список. Эту оптимизацию можно выполнить для обновлений, соответствующих следующим условиям:

  • Положительное обновление колонки было объявлено как JSON тип.
  • UPDATE заявлениеиспользовать JSON_SET()、JSON_REPLACE() или JSON_REMOVE() Три индивидуальные функции для любого индивидуального обновления списка. Непосредственно назначьте цену столбцу из (например, ОБНОВИТЬ). mytable SET jcol='{"A":10, "b": 25}') не может быть выполнено как частичное обновление. Одиночный человек может быть оптимизирован таким образом UPDATE Пары «многие-ко-многим» в предложении JSON Столбец обновления MySQL; Частичное обновление возможно только в тех случаях, когда обновленный столбец Достойный только что появился в списке.
  • Введите объем столбца Целевой столбец должен быть тем же столбцом, например; UPDATE mytable SET jcol1=JSON_SET(jcol2, '$.a', 100) Оператор Из класса из не может быть выполнен как частичное обновление. Просто введите длину столбца Так же, как и целевой столбец, обновления можно вызывать в любой комбинации, используя любую функцию, перечисленную в предыдущем пункте.
  • Все изменения заменяют существующие измножествоили объектов ценить новыми и не добавляют никаких новых элементов к родительскому объекту или множеству.
  • Замененная цена должна быть не меньше, чем замененная цена. другими словами,Новая цена не может быть больше старой. При обновлении предыдущего раздела до более высокой цены остается достаточно изкосмоса.,Можетможет появитьсяэтот Требоватьиз Исключения。Можеткиспользоватьфункция JSON_STORAGE_FREE() Проверять JSON Колонка из Сколько космосов было выпущено любым частичным обновлением.

добавив binlog_row_value_options Системные переменные установлены на PARTIAL_JSON,может быть Это частичное обновление позволяет сохранить запись двоичного журнала в компактном формате.

различатьхранилищесуществоватьповерхностьсерединаиз JSON Важно записывать в двоичный журнал частичные обновления значений столбцов вместе с частичным обновлением строк. верно JSON Полные обновления столбцов могут регистрироваться как частичные обновления в двоичном журнале. Это может произойти, если не соблюдены два последних индивидуальных условия в предыдущем списке, но соблюдены остальные условия. См. также binlog_row_value_options описание.

В следующих разделах представлена ​​основная информация о создании значений JSON и манипулировании ими.

2. Создайте значение JSON.

JSON множество содержит индивидуальный Достойный столбец поверхности, разделенный запятыми и разделенный [ и ] Вложенные персонажи:

Язык кода:javascript
копировать
["abc", 10, null, true, false]

JSON Объект содержит набор пар ключ-значение, разделенных запятыми и { и } Вложенные персонажи:

Язык кода:javascript
копировать
{"k1": "value", "k2": 10}

Как показано в примере, JSON Многие объекты могут содержать скалярценить строки или числа, JSON. null Текст или JSON Логическое значение true или false текст. JSON Ключ в объекте должен быть строкой. Также разрешено использовать времена (date, time или datetime) скалярценить:

Язык кода:javascript
копировать
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]

JSON множествоэлементи JSON Вложенность разрешена внутри значений ключей объекта:

Язык кода:javascript
копировать
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}

Также доступен из MySQL Получено из множества функций, предусмотренных для этого JSON ценить(Видеть“Раздел 14.17.2 создаватьJSONДостойныйфункция”),также Можеткиспользовать CAST(value AS JSON) Приведите значения других типов к JSON тип(Видеть“JSON ценитьи нет JSON Преобразование между ценить Из и из”)。Следующийизнесколько абзацевописывать MySQL Как справиться с JSON ценить.

существовать MySQL в формате JSON Значения записываются в виде строк. MySQL Любая необходимость использования в контексте синтаксического анализа JSON строка значений, если строка имеет вид JSON Если он недействителен, будет сгенерирована ошибка. Эти контексты включают вставку значений в объекты с помощью JSON тип столбец данных или передать ожидаемые параметры JSON Достойныйфункция(существовать MySQL JSON Документация по функциям обычно выглядит как JSON_doc или JSON_val), как показано в следующем примере:

Вставка значения в столбец JSON выполняется успешно, если значение является допустимым значением JSON, и не выполняется в противном случае:

Язык кода:javascript
копировать
mysql> CREATE TABLE t1 (jdoc JSON);
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text: "Invalid value." at position 6 in value (or column) '[1, 2,'.

Позиция «в позиции N» в таких сообщениях об ошибках отсчитывается от 0, но ее следует рассматривать как грубое указание на то, в каком месте значения действительно возникает проблема.

JSON_TYPE() функциянужен одининдивидуальный JSON параметр и попробуйте проанализировать его как JSON ценить.еслиценитьэффективный,затем вернись Достойный JSON введите, иначе возникает ошибка:

Язык кода:javascript
копировать
mysql> SELECT JSON_TYPE('["a", "b", 1]');
+----------------------------+
| JSON_TYPE('["a", "b", 1]') |
+----------------------------+
| ARRAY                      |
+----------------------------+

mysql> SELECT JSON_TYPE('"hello"');
+----------------------+
| JSON_TYPE('"hello"') |
+----------------------+
| STRING               |
+----------------------+

mysql> SELECT JSON_TYPE('hello');
ERROR 3146 (22032): Invalid data type for JSON data in argument 1 to function json_type; a JSON string or JSON type is required.

MySQL использовать utf8mb4 набор символов и utf8mb4_bin Обработка сортировки JSON использовать строку в контексте. из строк в других наборах символов будут преобразованы в utf8mb4。(ascii или utf8mb3 Строки в наборе символов преобразовывать не нужно, поскольку ascii и utf8mb3 да utf8mb4 подмножество. )

Записанный текст строки asuse JSON Альтернативы значениям,в том числе для составления из составных элементов JSON функция стоимости. JSON_ARRAY() получатьодининдивидуальный(Можетспособныйдлянулевой)Достойный Списокповерхность,и возвращает индивидуальное сообщение, содержащее следующие Достойный JSON:

Язык кода:javascript
копировать
mysql> SELECT JSON_ARRAY('a', 1, NOW());
+----------------------------------------+
| JSON_ARRAY('a', 1, NOW())              |
+----------------------------------------+
| ["a", 1, "2015-07-27 09:43:47.000000"] |
+----------------------------------------+

JSON_OBJECT() принимает (возможно, пустой) список пар ключ-значение и возвращает объект JSON, содержащий эти пары:

Язык кода:javascript
копировать
mysql> SELECT JSON_OBJECT('key1', 1, 'key2', 'abc');
+---------------------------------------+
| JSON_OBJECT('key1', 1, 'key2', 'abc') |
+---------------------------------------+
| {"key1": 1, "key2": "abc"}            |
+---------------------------------------+

JSON_MERGE_PRESERVE() получатьдваиндивидуальныйилимногоиндивидуальный JSON документируйте и возвращайте объединенный результат:

Язык кода:javascript
копировать
mysql> SELECT JSON_MERGE_PRESERVE('["a", 1]', '{"key": "value"}');
+-----------------------------------------------------+
| JSON_MERGE_PRESERVE('["a", 1]', '{"key": "value"}') |
+-----------------------------------------------------+
| ["a", 1, {"key": "value"}]                          |
+-----------------------------------------------------+
1 row in set (0.00 sec)

Информация о правилах и положениях о слияниях,Видеть“JSON Достойный Стандартизировать、слитьи Автоматическая упаковка”。(MySQL 8.0.3 и более поздние версии также поддерживают JSON_MERGE_PATCH(),У него другое поведение. Информация о различиях между этими двумя индивидуальными функциями Из,Видеть“JSON_MERGE_PATCH() и JSON_MERGE_PRESERVE() из сравнения”。)

Значения JSON можно присваивать пользовательским переменным:

Язык кода:javascript
копировать
mysql> SET @j = JSON_OBJECT('key', 'value');
mysql> SELECT @j;
+------------------+
| @j               |
+------------------+
| {"key": "value"} |
+------------------+

Однако пользовательские переменные не могут быть JSON тип данных, поэтому, хотя в предыдущем примере @j выглядит как JSON ценить и иметь JSON ценитьтакой жеизнабор символов Правила сортировки,но у него нет JSON Тип данных. JSON_ОБЪЕКТ() Результат существования преобразуется в строку при присвоении переменной.

Строка, сгенерированная путем преобразования значения JSON, имеет набор символов utf8mb4 и параметры сортировки utf8mb4_bin:

Язык кода:javascript
копировать
mysql> SELECT CHARSET(@j), COLLATION(@j);
+-------------+---------------+
| CHARSET(@j) | COLLATION(@j) |
+-------------+---------------+
| utf8mb4     | utf8mb4_bin   |
+-------------+---------------+

потому что utf8mb4_bin двоичная сортировка, поэтому JSON Сравнение значений чувствительно к регистру.

Язык кода:javascript
копировать
mysql> SELECT JSON_ARRAY('x') = JSON_ARRAY('X');
+-----------------------------------+
| JSON_ARRAY('x') = JSON_ARRAY('X') |
+-----------------------------------+
|                                 0 |
+-----------------------------------+

Чувствительность к регистру также применяется к JSON null、true и false Текст, который всегда должен быть в нижнем регистре:

Язык кода:javascript
копировать
mysql> SELECT JSON_VALID('null'), JSON_VALID('Null'), JSON_VALID('NULL');
+--------------------+--------------------+--------------------+
| JSON_VALID('null') | JSON_VALID('Null') | JSON_VALID('NULL') |
+--------------------+--------------------+--------------------+
|                  1 |                  0 |                  0 |
+--------------------+--------------------+--------------------+

mysql> SELECT CAST('null' AS JSON);
+----------------------+
| CAST('null' AS JSON) |
+----------------------+
| null                 |
+----------------------+
1 row in set (0.00 sec)

mysql> SELECT CAST('NULL' AS JSON);
ERROR 3141 (22032): Invalid JSON text in argument 1 to function cast_as_json: "Invalid value." at position 0 in 'NULL'.

JSON Чувствительность к регистру текста отличается от SQL NULL、TRUE и FALSE Текст, который может быть в любом случае:

Язык кода:javascript
копировать
mysql> SELECT ISNULL(null), ISNULL(Null), ISNULL(NULL);
+--------------+--------------+--------------+
| ISNULL(null) | ISNULL(Null) | ISNULL(NULL) |
+--------------+--------------+--------------+
|            1 |            1 |            1 |
+--------------+--------------+--------------+

иногдасуществовать JSON Вставьте символы кавычек (" или ') Может быть, нужно или надеюсь. Предположим, в этом примере вы хотите преобразовать некоторые JSON вставка объектаиспользоватьниже SQL операторов, эти объекты содержат строки, представляющие предложения, в которых говорится MySQL В некоторых случаях каждая отдельная строка имеет соответствующие пары ключевых слов:

Язык кода:javascript
копировать
mysql> CREATE TABLE facts (sentence JSON);

Среди этих пар ключевое слово-предложение есть такая пара:

Язык кода:javascript
копировать
mascot: The MySQL mascot is a dolphin named "Sakila".

относиться к этому как JSON вставка объекта facts поверхностьизметоддаиспользовать MySQL JSON_object() Функция. существуют В этом случае,Необходимо использовать обратную косую черту для экранирования каждого отдельного символа кавычки.,Как показано ниже:

Язык кода:javascript
копировать
mysql> INSERT INTO facts VALUES
     >   (JSON_OBJECT("mascot", "Our mascot is a dolphin named \"Sakila\"."));

Если вы хотите, чтобы значение было JSON Вставка текста объекта,Это письмо не будет работать таким же образом. В этом случае вам необходимо экранировать его двойной обратной косой чертой.,Как показано ниже:

Язык кода:javascript
копировать
mysql> INSERT INTO facts VALUES
     >   ('{"mascot": "Our mascot is a dolphin named \\"Sakila\\"."}');

использовать двойную обратную косую черту, чтобы предотвратить MySQL Выполняет обработку escape-последовательности и передает строковый литерал механизму хранилища для обработки. Вставьте любым из только что показанных способов. JSON объект, выполнив простой SELECT можно увидеть JSON Списокценитьсерединажитьсуществоватьобратная косая черта,Как показано ниже:

Язык кода:javascript
копировать
mysql> SELECT sentence FROM facts;
+---------------------------------------------------------+
| sentence                                                |
+---------------------------------------------------------+
| {"mascot": "Our mascot is a dolphin named \"Sakila\"."} |
+---------------------------------------------------------+

Чтобы найти этого человека с mascot дляключевое слово конкретное предложение, можно использовать столбец - оператор пути ->,Как показано ниже:

Язык кода:javascript
копировать
mysql> SELECT col->"$.mascot" FROM qtest;
+---------------------------------------------+
| col->"$.mascot"                             |
+---------------------------------------------+
| "Our mascot is a dolphin named \"Sakila\"." |
+---------------------------------------------+
1 row in set (0.00 sec)

Это сохранит обратные косые черты, а также кавычки рядом с ними. Спользовать mascot Отображает требуемую цену в качестве ключа, но не включает escape-символы рядом с кавычками, используйте встроенные операторы пути. ->>,Как показано ниже:

Язык кода:javascript
копировать
mysql> SELECT sentence->>"$.mascot" FROM facts;
+-----------------------------------------+
| sentence->>"$.mascot"                   |
+-----------------------------------------+
| Our mascot is a dolphin named "Sakila". |
+-----------------------------------------+

Описание: Если включено NO_BACKSLASH_ESCAPES сервер SQL режиме предыдущий пример не будет работать должным образом. Если этот режим установлен, вы можете вставить использовать с одной обратной косой чертой вместо двойной обратной косой черты. JSON Текст объекта с сохранением обратной косой черты. еслисуществовать выполнить вставкуиспользовать JSON_OBJECT() функция,и установите этот режим,Вы должны чередовать использование одинарных и двойных кавычек.,Как показано ниже:

Язык кода:javascript
копировать
mysql> INSERT INTO facts VALUES
     > (JSON_OBJECT('mascot', 'Our mascot is a dolphin named "Sakila".'));

Дополнительные сведения о влиянии этого режима на экранированные символы в значениях JSON см. в описании функции JSON_UNQUOTE().

3. Нормализация, объединение и автоматическая инкапсуляция значений JSON.

(1) Стандартизация

Когда отдельная строка анализируется и обнаруживается, что индивидуальная строка действительна из JSON При документировании оно также будет нормализовано. Это означает, что при чтении ключей слева направо обнаруживаются дубликаты ключей членов, найденных в документе, которые существуют и позади них. следующее JSON_object() Вызов ограниченностииз объекта ценить включает в себя только второго человека. key1 элемент,потому что дубликат ключа ценить соответствует из, за ​​которым следует один индивидуальный ценить.,Как показано ниже:

Язык кода:javascript
копировать
mysql> SELECT JSON_OBJECT('key1', 1, 'key2', 'abc', 'key1', 'def');
+------------------------------------------------------+
| JSON_OBJECT('key1', 1, 'key2', 'abc', 'key1', 'def') |
+------------------------------------------------------+
| {"key1": "def", "key2": "abc"}                       |
+------------------------------------------------------+

Нормализация также выполняется при вставке значений в столбцы JSON следующим образом:

Язык кода:javascript
копировать
mysql> CREATE TABLE t1 (c1 JSON);

mysql> INSERT INTO t1 VALUES
     >     ('{"x": 17, "x": "red"}'),
     >     ('{"x": 17, "x": "red", "x": [3, 5, 7]}');

mysql> SELECT c1 FROM t1;
+------------------+
| c1               |
+------------------+
| {"x": "red"}     |
| {"x": [3, 5, 7]} |
+------------------+

Этот «последний индивидуальный повторный ключ побеждает» из поведения RFC 7159 рекомендуется, и большинством JavaScript Реализация парсера. (Ошибка #86866, Bug #26369555)

существовать 8.0.3 предыдущий MySQL Версии, в которых ранее в документе обнаружен дубликат ключа или элемента, будут отброшены. следующее JSON_object() вызовгенерироватьизобъектценить Нетвключатьвторойиндивидуальный key1 элемент,потому что дубликат ключа ценить соответствует из, за ​​которым следует один индивидуальный ценить.:

Язык кода:javascript
копировать
mysql> SELECT JSON_OBJECT('key1', 1, 'key2', 'abc', 'key1', 'def');
+------------------------------------------------------+
| JSON_OBJECT('key1', 1, 'key2', 'abc', 'key1', 'def') |
+------------------------------------------------------+
| {"key1": 1, "key2": "abc"}                           |
+------------------------------------------------------+

существовали до MySQL 8.0.3. Эта нормализация «первого индивидуального дубликата ключа» также выполнялась при вставке ценить в существующий столбец JSON.

Язык кода:javascript
копировать
mysql> CREATE TABLE t1 (c1 JSON);

mysql> INSERT INTO t1 VALUES
     >     ('{"x": 17, "x": "red"}'),
     >     ('{"x": 17, "x": "red", "x": [3, 5, 7]}');

mysql> SELECT c1 FROM t1;
+-----------+
| c1        |
+-----------+
| {"x": 17} |
| {"x": 17} |
+-----------+

MySQL Также удаляет оригинал JSON Лишние пробелы между ключами ценили элементы в документе и существовали при отображении. Запятая (,) или двоеточие (:) оставьте (или существует, вставьте при необходимости) отдельный пробел. Это сделано для повышения читабельности.

генерировать JSON Достойный MySQL функция(Видеть“Раздел 14.17.2 создавать JSON Достойныйфункция”)общийдавозвращаться Стандартизироватьизценить.

Чтобы повысить эффективность поиска, MySQL Ты все равно будешь прав? JSON объектиз Сортировать по ключу。должен знать,Результаты сортировки могут быть изменены.,И нет никакой гарантии, что существование будет одинаковым для разных версий.

(2) Объединить значения JSON

MySQL 8.0.3 (и более поздние версии) поддерживают два алгоритма слияния по функциям JSON_MERGE_PRESERVE() и JSON_MERGE_PATCH() выполнить. Они обрабатывают повторяющиеся ключи по-разному: JSON_MERGE_PRESERVE(). сохранять значения для повторяющихся ключей, тогда как JSON_MERGE_PATCH() Отмените все ценить, кроме последней индивидуальной цены. Следующие несколько абзацев объясняют, как работать с этими двумя индивидуальными функциями. JSON Документы (т.е. объекты и множество) из разных комбинаций объединяются.

Описание: JSON_MERGE_PRESERVE(). Предыдущая версияиз MySQL(существовать MySQL 8.0.3 переименован) в JSON_MERGE() функциятакой же。существовать MySQL 8.0 в формате JSON_MERGE() все еще как JSON_MERGE_PRESERVE() изодининдивидуальныйпсевдоним этоподдерживать,Но использовать больше не рекомендуется,И существующие будут удалены в будущих версиях.

Объединение массивов

Существующее сочетание множества индивидуальных множествоиз контекста было слито в одно индивидуальное множество. JSON_MERGE_PRESERVE() Это достигается за счет подключения количества после множества к концу прибытия перед одним индивидуальным множествоиз. JSON_MERGE_PATCH() Рассматривайте каждый индивидуальный параметр как индивидуальный, состоящий из одного индивидуального элемента из множества (так что его индекс равен 0), а затем применить логику «выигрыш последнего повторенного ключа», чтобы выбрать только последний индивидуальный параметр. Этот запрос можно сравнить, показав результаты:

Язык кода:javascript
копировать
mysql> SELECT
    ->   JSON_MERGE_PRESERVE('[1, 2]', '["a", "b", "c"]', '[true, false]') AS Preserve,
    ->   JSON_MERGE_PATCH('[1, 2]', '["a", "b", "c"]', '[true, false]') AS Patch\G
*************************** 1. row ***************************
Preserve: [1, 2, "a", "b", "c", true, false]
   Patch: [true, false]

Объединение объектов

слитьмногоиндивидуальныйобъектвстречагенерироватьодининдивидуальныйобъект。JSON_MERGE_PRESERVE() добавление имеет один и тот же ключ для всех уникальных цен, комбинация приезжает индивидуальное множество, чтобы иметь дело с Несколько отдельных объектов; множество впоследствии используется в качестве ключа в результате оценить.JSON_MERGE_PATCH() Отменить поездку слева направо, чтобы найти повторяющиеся ключи, чтобы результат содержал только последнюю индивидуальную цену этого ключа. Следующий запрос иллюстрирует повторяющиеся ключи. a Разница в результатах:

Язык кода:javascript
копировать
mysql> SELECT
    ->   JSON_MERGE_PRESERVE('{"a": 1, "b": 2}', '{"c": 3, "a": 4}', '{"c": 5, "d": 3}') AS Preserve,
    ->   JSON_MERGE_PATCH('{"a": 3, "b": 2}', '{"c": 3, "a": 4}', '{"c": 5, "d": 3}') AS Patch\G
*************************** 1. row ***************************
Preserve: {"a": [1, 4], "b": 2, "c": [3, 5], "d": 3}
   Patch: {"a": 4, "b": 2, "c": 5, "d": 3}
(3) Автоматическая упаковка

существоватьнуждатьсямножество Достойныйначальствонижесерединаиспользоватьиз Нетмножествоценитьда Автоматическая упаковкаиз:Долженценить Зависит от [ и ] символов, чтобы преобразовать его во множество. В следующем из утверждении каждый отдельный параметр является автоматическим. упаковкадляодининдивидуальныймножество([1], [2]). Эти результаты затем объединяются в один результат индивидуального числа и То же, что и в первых двух случаях, JSON_MERGE_PRESERVE(); объединяет значения с одним и тем же ключом, тогда как JSON_MERGE_PATCH() выброситьудалятьнаконецодининдивидуальныйключ Изснаружиизвсеповторитьключизценить,Как показано ниже:

Язык кода:javascript
копировать
mysql> SELECT
      ->   JSON_MERGE_PRESERVE('1', '2') AS Preserve,
      ->   JSON_MERGE_PATCH('1', '2') AS Patch\G
*************************** 1. row ***************************
Preserve: [1, 2]
   Patch: 2

множествоиобъектизценитьдадобавивобъект Автоматическая упаковка имеет множество значений и объединяется путем объединения множества цен, или объединяется «выигрывает последний индивидуальный дубликат ключа», в соответствии с выбором функции слияния (соответственно соответствующему JSON_MERGE_PRESERVE() или JSON_MERGE_PATCH()), как показано в этом примере:

Язык кода:javascript
копировать
mysql> SELECT
      ->   JSON_MERGE_PRESERVE('[10, 20]', '{"a": "x", "b": "y"}') AS Preserve,
      ->   JSON_MERGE_PATCH('[10, 20]', '{"a": "x", "b": "y"}') AS Patch\G
*************************** 1. row ***************************
Preserve: [10, 20, {"a": "x", "b": "y"}]
   Patch: {"a": "x", "b": "y"}

4. Найдите и измените значения JSON.

JSON Выражения пути используются в запросах JSON Выражение поверхности изценить.path в документе используется для извлечения детали. JSON Исполнение или модификация документа JSON Функции документа очень полезны для указания местоположения операций в документе. Например, следующий запрос начинается с JSON Извлеченный документ имеет name Значение члена ключа:

Язык кода:javascript
копировать
mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
+---------------------------------------------------------+
| JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
+---------------------------------------------------------+
| "Aztalan"                                               |
+---------------------------------------------------------+

синтаксис путииспользовать предисловие $ символы, обозначающие рассматриваемый документ JSON, за которыми необязательно следуют селекторы, которые, в свою очередь, указывают на более конкретные части документа:

Точка, за которой следует индивидуальное имя ключа.,Используется для извлечения члена с заданным именем ключа в объекте. если без кавычек из существует имя, путь к поверхности недопустим в выражении (например,,если содержит пробелы),Имя ключа должно быть указано в двойных кавычках.

[N] После добавления к пути массива выбора извлеките позицию в массиве N Местоположение изценить.множество позиции да начинается с нуля из целого числа. если путь не выбран многоценить, то path[0] из Результаты расчетов path такой же:

Язык кода:javascript
копировать
mysql> SELECT JSON_SET('"x"', '$[0]', 'a');
+------------------------------+
| JSON_SET('"x"', '$[0]', 'a') |
+------------------------------+
| "a"                          |
+------------------------------+
1 row in set (0.00 sec)

[M приезжать N] Укажите множество Достойного подмножества или диапазона, начиная с позиции M Начать с ценить, должность приезжать N Значение заканчивается на. последний Используется поддержкой как синоним крайнего правого индекса множества элементов. Также поддерживается множество элементов относительного адреса. если path Если значение массива не выбрано, то path[last] из Результаты расчетов path изценитьтакой же,Как показано далее в этом разделе(Видеть“Крайний правый элемент измножество”)。

Путь может содержать * или ** Подстановочный знак: .[*] Оценивать JSON Значения всех членов объекта [*] Оценивать JSON множествосерединавсеэлементизценить.prefix**suffix Оценивать Все начинается с префикса имени、заканчиваться суффиксом имениизпуть。

документсередина Не существуетсуществоватьизпуть(Результат для Оценивать:Не существуетсуществоватьизданные)вычислитьрезультатдля NULL。

Рассмотрите возможность использования $ Цитата ниже этого человека имеет три индивидуальных элемента: JSON Множество:

Язык кода:javascript
копировать
[3, {"a": [5, 6], "b": 10}, [99, 100]]

Так:

  • $[0] Оцениватьрезультатда 3。
  • $[1] Оцениватьрезультатда {"a": [5, 6], "b": 10}。
  • $[2] Оцениватьрезультатда [99, 100]。
  • $[3] Оцениватьрезультатда NULL(это относится киздачетвертыйиндивидуальныймножествоэлемент Не существуетсуществовать)。

потому что [1] и [2] из Оцениватьрезультатда Нетскалярценить,Таким образом, их можно использовать в качестве основы для выбора вложенных более конкретных путей выражений поверхности. Пример:

  • $[1].a Результат из Оценивать [5, 6]。
  • $[1].a[1] Результат для Оценивать: 6。
  • $[1].b Результат для Оценивать: 10。
  • $[2][0] Результат из Оценивать 99。

Как упоминалось ранее, выражение if unquoted from key name существует поверхность пути недопустимо, поэтому именованный компонент key out path должен быть заключен в кавычки. позволять $ поверхность Показать этоиндивидуальныйценить:

Язык кода:javascript
копировать
{"a fish": "shark", "a bird": "sparrow"}

Все ключи содержат пробелы и должны быть заключены в двойные кавычки:

  • $."a fish" из Оцениватьрезультатда shark。
  • $."a bird" из Оцениватьрезультатда sparrow。

использоватьподстановочный знакизпутьвычислить得出измножество Можетспособный包含многоиндивидуальныйценить:

Язык кода:javascript
копировать
mysql> SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": [3, 4, 5]}', '$.*');
+---------------------------------------------------------+
| JSON_EXTRACT('{"a": 1, "b": 2, "c": [3, 4, 5]}', '$.*') |
+---------------------------------------------------------+
| [1, 2, [3, 4, 5]]                                       |
+---------------------------------------------------------+
mysql> SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": [3, 4, 5]}', '$.c[*]');
+------------------------------------------------------------+
| JSON_EXTRACT('{"a": 1, "b": 2, "c": [3, 4, 5]}', '$.c[*]') |
+------------------------------------------------------------+
| [3, 4, 5]                                                  |
+------------------------------------------------------------+

существуют В следующем примере путь **.b Результат для Оценивать:многоиндивидуальныйпуть(.a.b и

Язык кода:javascript
копировать
mysql> SELECT JSON_EXTRACT('{"a": {"b": 1}, "c": {"b": 2}}', '$**.b');
+---------------------------------------------------------+
| JSON_EXTRACT('{"a": {"b": 1}, "c": {"b": 2}}', '$**.b') |
+---------------------------------------------------------+
| [1, 2]                                                  |
+---------------------------------------------------------+
(1) Диапазон в массиве JSON

Можно использовать с to ключевое слово range указать JSON Подмножество массива. Например, $[1 to 3] включатьмножествоизвторой、третийичетвертыйиндивидуальныйэлемент,Как показано ниже:

Язык кода:javascript
копировать
mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]');
+----------------------------------------------+
| JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]') |
+----------------------------------------------+
| [2, 3, 4]                                    |
+----------------------------------------------+
1 row in set (0.00 sec)

Грамматика да M приезжать Н, среди которых M и N Соответственно JSON множество элементов в серии: от первого индивидуального до последнего индивидуального индекса. Н должно быть больше, чем M;M должно быть больше, чемили равно 0. множество элементов с индексом 0 начало。Можетксуществоватьподдерживатьподстановочный использовать область видимости контекста.

(2) Самый правый элемент массива

поддерживатьиспользовать last Ключевое слово используется как синоним нижнего индекса последнего индивидуального элемента в множестве. последний-N формаизповерхностьвыражение Можетиспользуется дляотносительный адреси Определение области действия,Как показано ниже:

Язык кода:javascript
копировать
mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-3 to last-1]');
+--------------------------------------------------------+
| JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-3 to last-1]') |
+--------------------------------------------------------+
| [2, 3, 4]                                              |
+--------------------------------------------------------+
1 row in set (0.01 sec)

еслииспользуется для Оценивать Достойныйпуть Нетдамножество,но Оцениватьрезультати Воля Долженценить Инкапсуляциясуществоватьодининдивидуальныйэлементмножествосерединачасизрезультаттакой же:

Язык кода:javascript
копировать
mysql> SELECT JSON_REPLACE('"Sakila"', '$[last]', 10);
+-----------------------------------------+
| JSON_REPLACE('"Sakila"', '$[last]', 10) |
+-----------------------------------------+
| 10                                      |
+-----------------------------------------+
1 row in set (0.00 sec)

может быть column->path,вместе с JSON Идентификатор столбца и JSON вместе с выражениями пути, используемыми как JSON_EXTRACT(column, path) изсинонимы。связанный Дажемногоинформация,Видеть“Раздел 14.17.3 поиск JSON Достойныйфункция”。Другой Может Видеть“индексгенерироватьстолбец для предоставления JSON индекс столбца”。

некоторыйфункцияиспользоватьсуществующийиз JSON document, каким-либо образом измените его и верните измененный документ. Выражение поверхности пути указывает расположение изменений, внесенных в существующий документ. Например, JSON_SET(), JSON_INSERT(). и JSON_REPLACE() функциясоответственноиспользоватьодининдивидуальный JSON документ, плюс пара путей ценить, описывающих место изменения документа. Эта функция обрабатывает существующие документы по-разному.

Рассмотрим следующий индивидуальный документ:

Язык кода:javascript
копировать
mysql> SET @j = '["a", {"b": [true, false]}, [10, 20]]';

JSON_SET() заменит существующий путь «изценить» и добавит «ценить» для отсутствующего пути «существовать»:

Язык кода:javascript
копировать
mysql> SELECT JSON_SET(@j, '$[1].b[0]', 1, '$[2][2]', 2);
+--------------------------------------------+
| JSON_SET(@j, '$[1].b[0]', 1, '$[2][2]', 2) |
+--------------------------------------------+
| ["a", {"b": [1, false]}, [10, 20, 2]]      |
+--------------------------------------------+

существуют В этом случае путь [1].b[0] При выборе отдельного существующего ценить(true) ценить будет заменен параметром пути, следующим за изценить(1). путь [2][2] существующего не существует, поэтому соответствующее изценить (2) добавляется надписью приезжать

JSON_INSERT() добавляет новые значения, но не заменяет существующие значения:

Язык кода:javascript
копировать
mysql> SELECT JSON_INSERT(@j, '$[1].b[0]', 1, '$[2][2]', 2);
+-----------------------------------------------+
| JSON_INSERT(@j, '$[1].b[0]', 1, '$[2][2]', 2) |
+-----------------------------------------------+
| ["a", {"b": [true, false]}, [10, 20, 2]]      |
+-----------------------------------------------+

JSON_REPLACE() заменит существующие значения и проигнорирует новые значения:

Язык кода:javascript
копировать
mysql> SELECT JSON_REPLACE(@j, '$[1].b[0]', 1, '$[2][2]', 2);
+------------------------------------------------+
| JSON_REPLACE(@j, '$[1].b[0]', 1, '$[2][2]', 2) |
+------------------------------------------------+
| ["a", {"b": [1, false]}, [10, 20]]             |
+------------------------------------------------+

path-value Чтобы да слева приезжать направо Оценивать. При Оценивании пары удешевление документ станет Оценивать следующую пару по новой цене.

JSON_REMOVE() Получает документ JSON и указывает путь для удаления из документа. Возвращает исходный документ минус путь, выбранный в документе:

Язык кода:javascript
копировать
mysql> SELECT JSON_REMOVE(@j, '$[2]', '$[1].b[1]', '$[1].b[1]');
+---------------------------------------------------+
| JSON_REMOVE(@j, '$[2]', '$[1].b[1]', '$[1].b[1]') |
+---------------------------------------------------+
| ["a", {"b": [true]}]                              |
+---------------------------------------------------+

Операции с путями имеют следующие эффекты:

  • $[2] соответствовать [10, 20]и удалитьудалятьэто。
  • $[1].b[1] из Нет.одининдивидуальный Примерсуществовать b элементсерединасоответствовать false и удалить егоудалять。
  • $[1].b[1] из Второй индивидуальный экземпляри Содержимое не соответствует: Элемент удален Удалить,Путь больше не существует,Это тоже не имеет никакого эффекта.

5. Синтаксис пути JSON

MySQL существовать и существовать, описанные в других разделах данного руководства, из многих JSON функция(Видеть“Раздел 14.17 JSONфункция”),нужен одининдивидуальныйпутьповерхностьвыражение来识别 JSON из Конкретные элементы в документе. Путь состоит из пути из диапазона и одной индивидуальной или нескольких индивидуальных ветвей пути. для MySQL JSON Путь использования функции, область действия всегда дана для поиска или иного манипулирования документом, которому предшествует $ представление персонажа. Ветви пути разделяются символами точки (.). Ячейки массива представлены [N] средства, среди которых N неотрицательное целое число. Имя ключа должно быть строкой в ​​двойных кавычках, чтобы быть действительным. ECMAScript идентификатор (см. ECMAScript спецификация языкасерединаиз“имя идентификатора и идентификатор”)。и JSON Как и текст, выражение поверхности пути следует использовать. ascii、utf8mb3 или utf8mb4 набор символов для кодирования. Другие кодировки символов неявно принуждаются к utf8mb4. Полный синтаксис выглядит следующим образом:

Язык кода:javascript
копировать
pathExpression:
    scope[(pathLeg)*]

pathLeg:
    member | arrayLocation | doubleAsterisk

member:
    period ( keyName | asterisk )

arrayLocation:
    leftBracket ( nonNegativeInteger | asterisk ) rightBracket

keyName:
    ESIdentifier | doubleQuotedString

doubleAsterisk:
    '**'

period:
    '.'

asterisk:
    '*'

leftBracket:
    '['

rightBracket:
    ']'

как упоминалось ранее,существовать MySQL , путь в области видимости всегда да для работы из документа, поверхность отображается как 。Можетксуществовать JSON путьповерхностьвыражениесерединаиспользовать “” Как синоним документа.

Описание: Некоторые реализации утверждения JSON ссылка на столбец в области пути,но MySQL 8.0 Нетподдерживать。

подстановочный знак * и ** отметкаизиспользовать Вот как:

  • .* поверхность представляет все элементы объекта.
  • [*] поверхность Показыватьмножествосерединавсеэлементизценить.
  • [prefix]**suffix поверхность представляет все пути, начинающиеся с префикса и заканчивающиеся суффиксом из. Префикс да необязателен, а суффикс да обязателен, другими словами, путь не может начинаться с; ** Заканчивать.

Кроме того, путь не может содержать *** последовательность Список.

Примеры синтаксиса пути см. в разделе «Различные». JSON Описание функции, например JSON_CONTAINS_PATH()、JSON_SET() и JSON_REPLACE()。связанныйиспользовать * и ** подстановочный Примеры знаков см. JSON_SEARCH() функцияописание.

MySQL 8.0 возвращатьсяподдерживатьиспользовать to Ключевые слова (например, $[2 to 10]) как JSON диапазонное представление подмножества массива и last закрыватьключкаллиграфиядлямножествосамый правыйэлементизсинонимы。связанный Дажемногоинформацияи Показыватьпример,Видеть“поиски Исправлять JSON ценить”。

6. Сравнение и сортировка значений JSON.

JSON ценить Можеткиспользовать =、<、<=、>、>=、<>、!= и <=> оператор сравнения. JSON ценить пока не поддерживаются следующие операторы сравнения функции:

  • BETWEEN
  • IN()
  • GREATEST()
  • LEAST()

использовать Здесь перечислены операторы сравнения, если функции являются индивидуальными решениями. JSON Значение преобразуется в MySQL родной из числового или строкового типа данные, чтобы сделать их последовательными и непротиворечивыми. JSON Скалярный тип.

JSON Достойный разделен на два индивидуальных уровня. Сравнение первого уровня основано на сравниваемом Достойном JSON тип.Если типы разные, результат сравнения зависит только от того, какой тип имеет более высокий приоритет. если эти два индивидуума имеют одинаковую цену JSON Введите, затем используйте правила, специфичные для типа, для выполнения сравнения второго уровня.

В следующем списке показаны JSON Типы имеют приоритет от высокого уровня проживания до низкого уровня. (Имя типа да задано JSON_TYPE() Функция возвращает имя. ) существуют, показаны вместе в одной строке из типов с одинаковым приоритетом. Поверхность колонны, указанная ранее, имеет JSON Любое значение типа имеет большее JSON Любое значение типа больше.

Язык кода:javascript
копировать
BLOB
BIT
OPAQUE
DATETIME
TIME
DATE
BOOLEAN
ARRAY
OBJECT
STRING
INTEGER, DOUBLE
NULL

Для тех, у кого такой же приоритет JSON ценить,Сравнительные правиланодаспецифичный длятипиз:

BLOB:сравнить дваиндивидуальный Достойныйвперед N индивидуальныйбайт,Чтосередина N дакорочеценитьсерединаизбайтчисло。еслидваиндивидуальный Достойныйвперед N отдельные байты одинаковы, то более короткое изценить будет организовано раньше более длинного изценить Из.

BIT:и BLOB Правила те же.

OPAQUE:и BLOB Правила те же.OPAQUE ценитьда не классифицируется как Другие типыизценить.

DATETIME: поверхность указывает на более ранний момент времени, а зценить существование строки поверхности указывает на более поздний момент времени из числа ценить Из назад. если и индивидуальноценить соответственно родом из MySQL DATETIME и TIMESTAMP тип,Тогда, если их поверхности представляют один и тот же момент времени,Тогда они да равны из.

TIME:дваиндивидуальныйвремяценитьсерединаменьшеизодининдивидуальный Нажиматьпоследовательность Рядсуществовать Большеизодининдивидуальный Извперед。

ДАТА: Более ранняя дата ранжируется перед самой поздней датой.

ARRAY:еслидваиндивидуальный JSON «множество» имеет одинаковую длину, а соответствующие позиции изценить в «множестве» равны, тогда они равны. если множество не равно, то их порядок определяется элементом из в первой индивидуальной позиции хранимой разницы существования. Локация находится перед меньшим ценить из множества существующих рядов. если более короткие числа из всех ценить равны более длинным числам из соответствующих цен, то более короткие числа стоят перед существованием. Например:

Язык кода:javascript
копировать
[] < ["a"] < ["ab"] < ["ab", "cd", "ef"] < ["ab", "ef"]

BOOLEAN: ложный текст JSON меньше истинного текста JSON.

OBJECT:еслидваиндивидуальный JSON Объекты имеют одинаковый набор ключей, и если каждый ключ в двух объектах имеет один и тот же ключ, то они равны. Например:

Язык кода:javascript
копировать
{"a": 1, "b": 2} = {"b": 2, "a": 1}

Два индивидуума не равны из объектов, порядок да не указан, но является детерминированным.

STRING: сравниваются две отдельные строки utf8mb4 Выраженный ранее N отдельные байты сортируются лексически, где N да короче строка по длине. если дваиндивидуальная строка в изпрежде N Байты одинаковы, более короткая строка считается меньшей, чем более длинная. Например:

Язык кода:javascript
копировать
"a" < "ab" < "b" < "bc"

Эта сортировка эквивалентна правилу сортировки utf8mb4_bin из SQL Строка сортировки. потому что что utf8mb 4_bin двоичная сортировка, поэтому JSON Достойное сравнение чувствительно к регистру:

Язык кода:javascript
копировать
"A" < "a"

INTEGER, DOUBLE: JSON ценить может содержать точные числа и приблизительные числа. Общее обсуждение этих числовых типов.,Видеть“Раздел 11.1.2 Цифровой текст”。“Раздел 14.3. Выражение поверхности Оцениватьсерединаиз Преобразование типов”Обсуждается относительно родной MySQL Числовые типы из правил, но сравнение JSON Правила ценообразования несколько иные:

существуют соответственно использование собственного числового типа MySQL INT и DOUBLE из двух столбцов между сравнением.,Известно, что все сравнения включают индивидуальное целое число и индивидуальное двойное число.,Таким образом, все строки целых чисел преобразуются в двойные. То есть, да,Точные значения цен преобразуются в приблизительные значения цен.

С другой стороны, запрос if сравнивает два человека, которые содержат цифры из JSON столбцы, невозможно заранее узнать число целое или двойное. Чтобы обеспечить наиболее согласованное поведение во всех строках, MySQL будет приближаться к значению преобразуется Получите точную оценку. Получите последовательную сортировку без потери точности числовых оценок. Например, данный скаляр 9223372036854775805、9223372036854775806、9223372036854775807 и 9.223372036854776e18, в следующем порядке:

Язык кода:javascript
копировать
9223372036854775805 < 9223372036854775806 < 9223372036854775807 < 9.223372036854776e18 = 9223372036854776000 < 9223372036854776001

если JSON Сравниватьиспользовать Нет JSON Если существуют правила численного сравнения, могут возникнуть несоответствия в сортировке. MySQL Обычно правила числового сравнения создают следующий порядок:

Целочисленное сравнение

Язык кода:javascript
копировать
9223372036854775805 < 9223372036854775806 < 9223372036854775807

(9.223372036854776e18 не определено)

Сравнение чисел двойной точности

Язык кода:javascript
копировать
9223372036854775805 = 9223372036854775806 = 9223372036854775807 = 9.223372036854776e18

для любого JSON ценитьи SQL NULL изCompare, результаты все да НЕИЗВЕСТНЫЙ. для сравнения JSON и нет JSON ценить, по правилам под поверхность не будет JSON Значение преобразуется в JSON, а затем сравните, как описано ранее.

7. Преобразование между значениями JSON и значениями, отличными от JSON.

В таблице ниже показаны правила, которым мы следуем при преобразовании значений MySQL и JSON.

Таблица 13.3 Правила преобразования JSON

Другие типы

CAST(other type AS JSON)

CAST(JSON AS other type)

JSON

постоянный

постоянный

Тип символов uft8 (utf8mb4, utf8mb3, ascii)

Строка анализируется как JSONценить.

JSONценить сериализуется в индивидуальную строку utf8mb4.

Другие типы персонажей

Другие кодировки символов неявно преобразуются в utf8mb4 и обрабатываются, как описано для этого типа символов.

Значения JSON сериализуются в строки utf8mb4, а затем преобразуются в другие кодировки символов. Результаты могут не иметь смысла.

NULL

Результат даJSON типа изNULLценить.

непригодный.

тип географии

Преобразование географического значения преобразуется в документ JSON путем вызова ST_AsGeoJSON().

Незаконная операция. Решение: измените CAST(json_val AS CHAR)из Результат передается в ST_GeomFromGeoJSON().

Все Другие типы

Результатом является документ JSON, состоящий из одного индивидуальногоскалярценить.

если документ JSON состоит из целевого типа индивидуальныйскалярценить,И скалярценить можно применить к целевому типу.,тогда успех. в противном случае,Возвращает NULL и выдает предупреждение.

JSON Достойный ORDER BY и GROUP BY Работайте по следующим принципам:

  • скаляр JSON Достойная сортировка использует те же правила, что обсуждались ранее.
  • Для возрастающего порядка SQL NULL Рядсуществоватьвсе JSON ценить Изранье, в том числе JSON null текст для убывания,SQL; NULL Рядсуществоватьвсе JSON ценить(включать JSON null текст) после.
  • JSON Достойный ключ сортировки по max_sort_length Системные переменные изценивают ограничения, поэтому существуют только первые индивидуумы. max_sort_length Различные ключи после байта Из сравниваются на равенство.
  • На данный момент поддержка не отсортирована по причине нескалярценить,и появится предупреждение.

Для сортировки используйте JSON Скаляр приведен к какому-то другому нативу MySQL Тип может быть выгодным из. Например, если называется jdoc из столбца содержит JSON Объект, члены которого представлены id ключи нетгрузценитькомпозиция,ноиспользоватьэтотповерхность Дартс пресс id Сортировка значений:

Язык кода:javascript
копировать
ORDER BY CAST(JSON_EXTRACT(jdoc, '$.id') AS UNSIGNED)

если столбец индивидуальной генерации определен как использовать ORDER BY То же выражение изповерхности в Оптимизатор MySQL это распознает.,并考虑Воляиндексиспользуется для План выполнения запроса。Видеть“Раздел 10.3.11 генерироватьиндекс столбцаизоптимизацияиспользовать”。

8. Агрегация значений JSON

То же, что и другие типы данных,для JSON Достойныйполимеризация,SQL NULL Значение игнорируется. Нет NULL Значения преобразуются в числовые типы и агрегируются, но MIN()、MAX() и GROUP_CONCAT() удалить. По количеству скаляриз JSON ценить, преобразование в число должно давать значимые результаты, хотя (в зависимости от ценить) может произойти усечение и потеря точности. Конвертировать другие JSON ценить как число может не дать значимых результатов.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose