COLUMN_GET
Синтаксис
COLUMN_GET(dyncol_blob, column_nr as type); COLUMN_GET(dyncol_blob, column_name as type);
Описание
Получает значение динамического столбца по его имени. Если столбец с заданным именем не существует, будет возвращено NULL.
column_name as type требует указания типа данных динамического столбца, который вы читаете.
Это может показаться нелогичным: зачем указывать тип данных, который вы получаете? Разве система динамических столбцов не может определить тип данных из хранимых данных?
Ответ: SQL — это язык со статической типизацией. SQL-интерпретатору необходимо знать типы данных всех выражений до выполнения запроса (например, когда вы используете подготовленные запросы и выполняете "select COLUMN_GET(...)", API подготовленных запросов требует, чтобы сервер уведомлял клиента о типе данных считываемого столбца до выполнения запроса, и сервер может видеть, какой тип данных у столбца на самом деле).
Длины
Если вы выполняете запросы типа:
SELECT COLUMN_GET(blob, 'colname' as CHAR) ...
без указания максимальной длины (т.е. используя as CHAR, а не as CHAR(n)), MariaDB сообщит, что максимальная длина столбца результирующего набора равна 16 777 216. Это может привести к чрезмерному использованию памяти в некоторых клиентских библиотеках, поскольку они пытаются предварительно выделить буфер максимальной ширины результирующего набора. Чтобы избежать этой проблемы, используйте CHAR(n) всякий раз, когда вы используете COLUMN_GET в списке выбора.
См. Динамические столбцы: Типы данных для получения дополнительной информации о типах данных.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/column_get/