--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------


--
-- Table structure for table `columns_priv`
--

CREATE TABLE `columns_priv` (
  `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '',
  `Db` char(64) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `User` char(32) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `Table_name` char(64) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `Column_name` char(64) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`Host`,`User`,`Db`,`Table_name`,`Column_name`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Column privileges';

--
-- Dumping data for table `columns_priv`
--


--
-- Table structure for table `component`
--

CREATE TABLE `component` (
  `component_id` int unsigned NOT NULL AUTO_INCREMENT,
  `component_group_id` int unsigned NOT NULL,
  `component_urn` text NOT NULL,
  PRIMARY KEY (`component_id`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='Components';

--
-- Dumping data for table `component`
--


--
-- Table structure for table `db`
--

CREATE TABLE `db` (
  `Host` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '',
  `Db` char(64) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `User` char(32) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Drop_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Grant_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `References_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Index_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Alter_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Create_view_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Show_view_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Create_routine_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Execute_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Event_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Trigger_priv` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  PRIMARY KEY (`Host`,`User`,`Db`),
  KEY `User` (`User`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Database privileges';

--
-- Dumping data for table `db`
--

INSERT INTO `db` VALUES ('localhost','performance_schema','mysql.session','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N'),('localhost','sys','mysql.sys','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','Y');

--
-- Table structure for table `default_roles`
--

CREATE TABLE `default_roles` (
  `HOST` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '',
  `USER` char(32) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `DEFAULT_ROLE_HOST` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '%',
  `DEFAULT_ROLE_USER` char(32) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  PRIMARY KEY (`HOST`,`USER`,`DEFAULT_ROLE_HOST`,`DEFAULT_ROLE_USER`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Default roles';

--
-- Dumping data for table `default_roles`
--


--
-- Table structure for table `engine_cost`
--

CREATE TABLE `engine_cost` (
  `engine_name` varchar(64) NOT NULL,
  `device_type` int NOT NULL,
  `cost_name` varchar(64) NOT NULL,
  `cost_value` float DEFAULT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `comment` varchar(1024) DEFAULT NULL,
  `default_value` float GENERATED ALWAYS AS ((case `cost_name` when _utf8mb3'io_block_read_cost' then 1.0 when _utf8mb3'memory_block_read_cost' then 0.25 else NULL end)) VIRTUAL,
  PRIMARY KEY (`cost_name`,`engine_name`,`device_type`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC;

--
-- Dumping data for table `engine_cost`
--

INSERT INTO `engine_cost` (`engine_name`, `device_type`, `cost_name`, `cost_value`, `last_update`, `comment`) VALUES ('default',0,'io_block_read_cost',NULL,'2020-09-28 15:35:46',NULL),('default',0,'memory_block_read_cost',NULL,'2020-09-28 15:35:46',NULL);

--
-- Table structure for table `func`
--

CREATE TABLE `func` (
  `name` char(64) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `ret` tinyint NOT NULL DEFAULT '0',
  `dl` char(128) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `type` enum('function','aggregate') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
  PRIMARY KEY (`name`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='User defined functions';

--
-- Dumping data for table `func`
--


--
-- Table structure for table `global_grants`
--

CREATE TABLE `global_grants` (
  `USER` char(32) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  `HOST` char(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT '',
  `PRIV` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '',
  `WITH_GRANT_OPTION` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  PRIMARY KEY (`USER`,`HOST`,`PRIV`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Extended global grants';

--
-- Dumping data for table `global_grants`
--

INSERT INTO `global_grants` VALUES ('mysql.infoschema','localhost','AUDIT_ABORT_EXEMPT','N'),('mysql.infoschema','localhost','FIREWALL_EXEMPT','N'),('mysql.infoschema','localhost','SYSTEM_USER','N'),('mysql.session','localhost','AUDIT_ABORT_EXEMPT','N'),('mysql.session','localhost','AUTHENTICATION_POLICY_ADMIN','N'),('mysql.session','localhost','BACKUP_ADMIN','N'),('mysql.session','localhost','CLONE_ADMIN','N'),('mysql.session','localhost','CONNECTION_ADMIN','N'),('mysql.session','localhost','FIREWALL_EXEMPT','N'),('mysql.session','localhost','PERSIST_RO_VARIABLES_ADMIN','N'),('mysql.session','localhost','SESSION_VARIABLES_ADMIN','N'),('mysql.session','localhost','SYSTEM_USER','N'),('mysql.session','localhost','SYSTEM_VARIABLES_ADMIN','N'),('mysql.session','localhost','TELEMETRY_LOG_ADMIN','N'),('mysql.sys','localhost','AUDIT_ABORT_EXEMPT','N'),('mysql.sys','localhost','FIREWALL_EXEMPT','N'),('mysql.sys','localhost','SYSTEM_USER','N'),('root','localhost','APPLICATION_PASSWORD_ADMIN','Y'),('root','localhost','AUDIT_ABORT_EXEMPT','Y'),('root','localhost','AUDIT_ADMIN','Y'),('root','localhost','AUTHENTICATION_POLICY_ADMIN','Y'),('root','localhost','BACKUP_ADMIN','Y'),('root','localhost','BINLOG_ADMIN','Y'),('root','localhost','BINLOG_ENCRYPTION_ADMIN','Y'),('root','localhost','CLONE_ADMIN','Y'),('root','localhost','CONNECTION_ADMIN','Y'),('root','localhost','ENCRYPTION_KEY_ADMIN','Y'),('root','localhost','FIREWALL_EXEMPT','Y'),('root','localhost','FLUSH_OPTIMIZER_COSTS','Y'),('root','localhost','FLUSH_STATUS','Y'),('root','localhost','FLUSH_TABLES','Y'),('root','localhost','FLUSH_USER_RESOURCES','Y'),('root','localhost','GROUP_REPLICATION_ADMIN','Y'),('root','localhost','INNODB_REDO_LOG_ARCHIVE','Y'),('root','localhost','INNODB_REDO_LOG_ENABLE','Y'),('root','localhost','PASSWORDLESS_USER_ADMIN','Y'),('root','localhost','PERSIST_RO_VARIABLES_ADMIN','Y'),('root','localhost','REPLICATION_APPLIER','Y'),('root','localhost','REPLICATION_SLAVE_ADMIN','Y'),('root','localhost','RESOURCE_GROUP_ADMIN','Y'),('root','localhost','RESOURCE_GROUP_USER','Y'),('root','localhost','ROLE_ADMIN','Y'),('root','localhost','SENSITIVE_VARIABLES_OBSERVER','Y'),('root','localhost','SERVICE_CONNECTION_ADMIN','Y'),('root','localhost','SESSION_VARIABLES_ADMIN','Y'),('root','localhost','SET_USER_ID','Y'),('root','localhost','SHOW_ROUTINE','Y'),('root','localhost','SYSTEM_USER','Y'),('root','localhost','SYSTEM_VARIABLES_ADMIN','Y'),('root','localhost','TABLE_ENCRYPTION_ADMIN','Y'),('root','localhost','TELEMETRY_LOG_ADMIN','Y'),('root','localhost','XA_RECOVER_ADMIN','Y');

--
-- Table structure for table `gtid_executed`
--

CREATE TABLE IF NOT EXISTS `gtid_executed` (
  `source_uuid` char(36) NOT NULL COMMENT 'uuid of the source where the transaction was originally executed.',
  `interval_start` bigint NOT NULL COMMENT 'First number of interval.',
  `interval_end` bigint NOT NULL COMMENT 'Last number of interval.',
  PRIMARY KEY (`source_uuid`,`interval_start`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `help_category`
--

CREATE TABLE `help_category` (
  `help_category_id` smallint unsigned NOT NULL,
  `name` char(64) NOT NULL,
  `parent_category_id` smallint unsigned DEFAULT NULL,
  `url` text NOT NULL,
  PRIMARY KEY (`help_category_id`),
  UNIQUE KEY `name` (`name`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='help categories';

--
-- Dumping data for table `help_category`
--

INSERT INTO `help_category` VALUES (0,'Contents',0,''),(1,'Help Metadata',0,''),(2,'Data Types',0,''),(3,'Administration',0,''),(4,'Functions',0,''),(5,'Enterprise Encryption Functions',4,''),(6,'Language Structure',0,''),(7,'Geographic Features',0,''),(8,'MBR',7,''),(9,'WKT',7,''),(10,'Comparison Operators',4,''),(11,'Logical Operators',4,''),(12,'Flow Control Functions',4,''),(13,'Numeric Functions',4,''),(14,'Date and Time Functions',4,''),(15,'String Functions',4,''),(16,'Cast Functions and Operators',4,''),(17,'XML',4,''),(18,'Bit Functions',4,''),(19,'Encryption Functions',4,''),(20,'Locking Functions',4,''),(21,'Information Functions',4,''),(22,'Spatial Functions',4,''),(23,'WKT Functions',22,''),(24,'WKB Functions',22,''),(25,'Geometry Constructors',22,''),(26,'Geometry Property Functions',22,''),(27,'Point Property Functions',22,''),(28,'LineString Property Functions',22,''),(29,'Polygon Property Functions',22,''),(30,'GeometryCollection Property Functions',22,''),(31,'Geometry Relation Functions',22,''),(32,'MBR Functions',22,''),(33,'GTID',4,''),(34,'Aggregate Functions and Modifiers',4,''),(35,'GROUP BY Functions and Modifiers',4,''),(36,'Window Functions',4,''),(37,'Performance Schema Functions',4,''),(38,'Internal Functions',4,''),(39,'Miscellaneous Functions',4,''),(40,'Data Definition',0,''),(41,'Data Manipulation',0,''),(42,'Transactions',0,''),(43,'Replication Statements',0,''),(44,'Prepared Statements',0,''),(45,'Compound Statements',0,''),(46,'Account Management',0,''),(47,'Table Maintenance',0,''),(48,'Loadable Functions',0,''),(49,'Components',0,''),(50,'Plugins',0,''),(51,'Utility',0,''),(52,'Storage Engines',0,'');

--
-- Table structure for table `help_keyword`
--

CREATE TABLE `help_keyword` (
  `help_keyword_id` int unsigned NOT NULL,
  `name` char(64) NOT NULL,
  PRIMARY KEY (`help_keyword_id`),
  UNIQUE KEY `name` (`name`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='help keywords';

--
-- Dumping data for table `help_keyword`
--

INSERT INTO `help_keyword` VALUES (108,'%'),(264,'&'),(422,'(JSON'),(86,'*'),(84,'+'),(85,'-'),(423,'->'),(425,'->>'),(87,'/'),(75,':='),(59,'<'),(266,'<<'),(58,'<='),(56,'<=>'),(57,'<>'),(55,'='),(61,'>'),(60,'>='),(267,'>>'),(90,'ABS'),(881,'ACCOUNT'),(91,'ACOS'),(659,'ACTION'),(49,'ADD'),(120,'ADDDATE'),(121,'ADDTIME'),(915,'ADMIN'),(270,'AES_DECRYPT'),(271,'AES_ENCRYPT'),(581,'AFTER'),(247,'AGAINST'),(936,'AGGREGATE'),(582,'ALGORITHM'),(695,'ALL'),(50,'ALTER'),(583,'ANALYZE'),(62,'AND'),(528,'ANY_VALUE'),(660,'ARCHIVE'),(254,'ARRAY'),(724,'AS'),(466,'ASC'),(185,'ASCII'),(92,'ASIN'),(776,'ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS'),(6,'ASYMMETRIC_DECRYPT'),(13,'ASYMMETRIC_DERIVE'),(7,'ASYMMETRIC_ENCRYPT'),(8,'ASYMMETRIC_SIGN'),(9,'ASYMMETRIC_VERIFY'),(643,'AT'),(93,'ATAN'),(94,'ATAN2'),(882,'ATTRIBUTE'),(913,'AUTHENTICATION'),(745,'AUTOCOMMIT'),(584,'AUTOEXTEND_SIZE'),(585,'AUTO_INCREMENT'),(460,'AVG'),(586,'AVG_ROW_LENGTH'),(757,'BACKUP'),(771,'BEFORE'),(746,'BEGIN'),(288,'BENCHMARK'),(63,'BETWEEN'),(186,'BIN'),(253,'BINARY'),(563,'BINLOG'),(529,'BIN_TO_UUID'),(462,'BIT_AND'),(269,'BIT_COUNT'),(187,'BIT_LENGTH'),(463,'BIT_OR'),(464,'BIT_XOR'),(17,'BOOL'),(18,'BOOLEAN'),(230,'BOTH'),(647,'BTREE'),(467,'BY'),(42,'BYTE'),(971,'CACHE'),(689,'CALL'),(499,'CAN_ACCESS_COLUMN'),(500,'CAN_ACCESS_DATABASE'),(501,'CAN_ACCESS_TABLE'),(502,'CAN_ACCESS_USER'),(503,'CAN_ACCESS_VIEW'),(661,'CASCADE'),(76,'CASE'),(255,'CAST'),(862,'CATALOG_NAME'),(95,'CEIL'),(96,'CEILING'),(747,'CHAIN'),(883,'CHALLENGE_RESPONSE'),(587,'CHANGE'),(564,'CHANNEL'),(43,'CHAR'),(39,'CHARACTER'),(189,'CHARACTER_LENGTH'),(289,'CHARSET'),(188,'CHAR_LENGTH'),(588,'CHECK'),(589,'CHECKSUM'),(884,'CIPHER'),(863,'CLASS_ORIGIN'),(916,'CLIENT'),(944,'CLONE'),(697,'CLOSE'),(65,'COALESCE'),(965,'CODE'),(290,'COERCIBILITY'),(546,'COLLATE'),(291,'COLLATION'),(590,'COLUMN'),(591,'COLUMNS'),(864,'COLUMN_NAME'),(551,'COMMENT'),(748,'COMMIT'),(760,'COMMITTED'),(662,'COMPACT'),(552,'COMPLETION'),(940,'COMPONENT'),(272,'COMPRESS'),(663,'COMPRESSED'),(592,'COMPRESSION'),(190,'CONCAT'),(191,'CONCAT_WS'),(711,'CONCURRENT'),(859,'CONDITION'),(593,'CONNECTION'),(292,'CONNECTION_ID'),(749,'CONSISTENT'),(594,'CONSTRAINT'),(865,'CONSTRAINT_CATALOG'),(866,'CONSTRAINT_NAME'),(867,'CONSTRAINT_SCHEMA'),(860,'CONTINUE'),(97,'CONV'),(260,'CONVERT'),(122,'CONVERT_TZ'),(98,'COS'),(99,'COT'),(465,'COUNT'),(100,'CRC32'),(51,'CREATE'),(10,'CREATE_ASYMMETRIC_PRIV_KEY'),(11,'CREATE_ASYMMETRIC_PUB_KEY'),(14,'CREATE_DH_PARAMETERS'),(12,'CREATE_DIGEST'),(740,'CROSS'),(664,'CSV'),(484,'CUME_DIST'),(123,'CURDATE'),(885,'CURRENT'),(124,'CURRENT_DATE'),(293,'CURRENT_ROLE'),(125,'CURRENT_TIME'),(126,'CURRENT_TIMESTAMP'),(294,'CURRENT_USER'),(857,'CURSOR'),(868,'CURSOR_NAME'),(127,'CURTIME'),(595,'DATA'),(295,'DATABASE'),(949,'DATABASES'),(636,'DATAFILE'),(36,'DATE'),(128,'DATEDIFF'),(256,'DATETIME'),(129,'DATE_ADD'),(144,'DATE_FORMAT'),(130,'DATE_SUB'),(131,'DAY'),(145,'DAYNAME'),(146,'DAYOFMONTH'),(147,'DAYOFWEEK'),(148,'DAYOFYEAR'),(132,'DAY_HOUR'),(133,'DAY_MINUTE'),(134,'DAY_SECOND'),(848,'DEALLOCATE'),(28,'DEC'),(31,'DECIMAL'),(849,'DECLARE'),(2,'DEFAULT'),(839,'DEFAULT_AUTH'),(553,'DEFINER'),(653,'DEFINITION'),(101,'DEGREES'),(703,'DELAYED'),(596,'DELAY_KEY_WRITE'),(665,'DELETE'),(485,'DENSE_RANK'),(468,'DESC'),(982,'DESCRIBE'),(654,'DESCRIPTION'),(869,'DIAGNOSTICS'),(597,'DIRECTORY'),(554,'DISABLE'),(598,'DISCARD'),(461,'DISTINCT'),(725,'DISTINCTROW'),(88,'DIV'),(555,'DO'),(599,'DROP'),(739,'DUAL'),(726,'DUMPFILE'),(704,'DUPLICATE'),(666,'DYNAMIC'),(77,'ELSE'),(850,'ELSEIF'),(192,'ELT'),(556,'ENABLE'),(712,'ENCLOSED'),(547,'ENCRYPTION'),(78,'END'),(644,'ENDS'),(600,'ENGINE'),(950,'ENGINES'),(565,'ERROR'),(951,'ERRORS'),(239,'ESCAPE'),(713,'ESCAPED'),(557,'EVENT'),(963,'EVENTS'),(645,'EVERY'),(696,'EXCEPT'),(601,'EXCHANGE'),(847,'EXECUTE'),(642,'EXISTS'),(861,'EXIT'),(102,'EXP'),(248,'EXPANSION'),(886,'EXPIRE'),(983,'EXPLAIN'),(972,'EXPORT'),(193,'EXPORT_SET'),(934,'EXTENDED'),(682,'EXTENT_SIZE'),(149,'EXTRACT'),(424,'EXTRACTION)'),(261,'EXTRACTVALUE'),(887,'FACTOR'),(888,'FAILED_LOGIN_ATTEMPTS'),(15,'FALSE'),(932,'FAST'),(667,'FEDERATED'),(858,'FETCH'),(194,'FIELD'),(714,'FIELDS'),(917,'FILE'),(683,'FILE_BLOCK_SIZE'),(805,'FILTER'),(195,'FIND_IN_SET'),(889,'FINISH'),(602,'FIRST'),(486,'FIRST_VALUE'),(29,'FIXED'),(32,'FLOAT4'),(33,'FLOAT8'),(103,'FLOOR'),(973,'FLUSH'),(566,'FOR'),(741,'FORCE'),(603,'FOREIGN'),(196,'FORMAT'),(495,'FORMAT_BYTES'),(496,'FORMAT_PICO_TIME'),(296,'FOUND_ROWS'),(231,'FROM'),(197,'FROM_BASE64'),(150,'FROM_DAYS'),(151,'FROM_UNIXTIME'),(668,'FULL'),(604,'FULLTEXT'),(169,'FUNCTION'),(974,'GENERAL'),(336,'GEOMCOLLECTION'),(337,'GEOMETRYCOLLECTION'),(870,'GET'),(504,'GET_DD_COLUMN_PRIVILEGES'),(505,'GET_DD_CREATE_OPTIONS'),(506,'GET_DD_INDEX_SUB_PART_LENGTH'),(152,'GET_FORMAT'),(283,'GET_LOCK'),(761,'GLOBAL'),(918,'GRANT'),(952,'GRANTS'),(66,'GREATEST'),(576,'GROUP'),(530,'GROUPING'),(469,'GROUP_CONCAT'),(454,'GTID_SUBSET'),(455,'GTID_SUBTRACT'),(698,'HANDLER'),(727,'HAVING'),(669,'HEAP'),(5,'HELP'),(0,'HELP_DATE'),(1,'HELP_VERSION'),(198,'HEX'),(705,'HIGH_PRIORITY'),(890,'HISTORY'),(648,'HOST'),(953,'HOSTS'),(135,'HOUR'),(136,'HOUR_MINUTE'),(137,'HOUR_SECOND'),(297,'ICU_VERSION'),(722,'IDENTIFIED'),(81,'IF'),(82,'IFNULL'),(706,'IGNORE'),(777,'IGNORE_SERVER_IDS'),(605,'IMPORT'),(67,'IN'),(52,'INDEX'),(954,'INDEXES'),(533,'INET6_ATON'),(534,'INET6_NTOA'),(531,'INET_ATON'),(532,'INET_NTOA'),(715,'INFILE'),(914,'INITIAL'),(637,'INITIAL_SIZE'),(891,'INITIATE'),(426,'INLINE'),(742,'INNER'),(567,'INNODB'),(199,'INSERT'),(606,'INSERT_METHOD'),(941,'INSTALL'),(568,'INSTANCE'),(200,'INSTR'),(19,'INT1'),(22,'INT2'),(23,'INT3'),(25,'INT4'),(27,'INT8'),(26,'INTEGER'),(507,'INTERNAL_AUTO_INCREMENT'),(508,'INTERNAL_AVG_ROW_LENGTH'),(510,'INTERNAL_CHECKSUM'),(509,'INTERNAL_CHECK_TIME'),(511,'INTERNAL_DATA_FREE'),(512,'INTERNAL_DATA_LENGTH'),(513,'INTERNAL_DD_CHAR_LENGTH'),(514,'INTERNAL_GET_COMMENT_OR_ERROR'),(515,'INTERNAL_GET_ENABLED_ROLE_JSON'),(516,'INTERNAL_GET_HOSTNAME'),(517,'INTERNAL_GET_USERNAME'),(518,'INTERNAL_GET_VIEW_WARNING_OR_ERROR'),(519,'INTERNAL_INDEX_COLUMN_CARDINALITY'),(520,'INTERNAL_INDEX_LENGTH'),(521,'INTERNAL_IS_ENABLED_ROLE'),(522,'INTERNAL_IS_MANDATORY_ROLE'),(523,'INTERNAL_KEYS_DISABLED'),(524,'INTERNAL_MAX_DATA_LENGTH'),(525,'INTERNAL_TABLE_ROWS'),(526,'INTERNAL_UPDATE_TIME'),(710,'INTERSECT'),(68,'INTERVAL'),(707,'INTO'),(607,'INVISIBLE'),(840,'IO_THREAD'),(69,'IS'),(71,'ISNULL'),(762,'ISOLATION'),(892,'ISSUER'),(284,'IS_FREE_LOCK'),(535,'IS_IPV4'),(536,'IS_IPV4_COMPAT'),(537,'IS_IPV4_MAPPED'),(538,'IS_IPV6'),(285,'IS_USED_LOCK'),(539,'IS_UUID'),(527,'IS_VISIBLE_DD_OBJECT'),(851,'ITERATE'),(728,'JOIN'),(257,'JSON'),(416,'JSON_ARRAY'),(472,'JSON_ARRAYAGG'),(434,'JSON_ARRAY_APPEND'),(435,'JSON_ARRAY_INSERT'),(419,'JSON_CONTAINS'),(420,'JSON_CONTAINS_PATH'),(444,'JSON_DEPTH'),(421,'JSON_EXTRACT'),(436,'JSON_INSERT'),(428,'JSON_KEYS'),(445,'JSON_LENGTH'),(437,'JSON_MERGE'),(438,'JSON_MERGE_PATCH'),(439,'JSON_MERGE_PRESERVE'),(417,'JSON_OBJECT'),(473,'JSON_OBJECTAGG'),(429,'JSON_OVERLAPS'),(451,'JSON_PRETTY'),(418,'JSON_QUOTE'),(440,'JSON_REMOVE'),(441,'JSON_REPLACE'),(449,'JSON_SCHEMA_VALID'),(450,'JSON_SCHEMA_VALIDATION_REPORT'),(430,'JSON_SEARCH'),(442,'JSON_SET'),(452,'JSON_STORAGE_FREE'),(453,'JSON_STORAGE_SIZE'),(448,'JSON_TABLE'),(446,'JSON_TYPE'),(443,'JSON_UNQUOTE'),(447,'JSON_VALID'),(431,'JSON_VALUE'),(53,'KEY'),(569,'KEYRING'),(608,'KEYS'),(609,'KEY_BLOCK_SIZE'),(979,'KILL'),(487,'LAG'),(699,'LAST'),(153,'LAST_DAY'),(298,'LAST_INSERT_ID'),(488,'LAST_VALUE'),(201,'LCASE'),(489,'LEAD'),(232,'LEADING'),(72,'LEAST'),(852,'LEAVE'),(980,'LEAVES'),(202,'LEFT'),(203,'LENGTH'),(763,'LEVEL'),(223,'LIKE'),(690,'LIMIT'),(716,'LINES'),(338,'LINESTRING'),(104,'LN'),(717,'LOAD'),(204,'LOAD_FILE'),(718,'LOCAL'),(154,'LOCALTIME'),(155,'LOCALTIMESTAMP'),(205,'LOCATE'),(610,'LOCK'),(105,'LOG'),(107,'LOG10'),(106,'LOG2'),(577,'LOGFILE'),(772,'LOGS'),(47,'LONG'),(48,'LONGBINARY'),(853,'LOOP'),(206,'LOWER'),(691,'LOW_PRIORITY'),(207,'LPAD'),(208,'LTRIM'),(156,'MAKEDATE'),(157,'MAKETIME'),(209,'MAKE_SET'),(570,'MASTER'),(778,'MASTER_AUTO_POSITION'),(779,'MASTER_BIND'),(780,'MASTER_COMPRESSION_ALGORITHMS'),(781,'MASTER_CONNECT_RETRY'),(782,'MASTER_HEARTBEAT_PERIOD'),(783,'MASTER_HOST'),(784,'MASTER_LOG_FILE'),(785,'MASTER_LOG_POS'),(786,'MASTER_PASSWORD'),(787,'MASTER_PORT'),(458,'MASTER_POS_WAIT'),(788,'MASTER_RETRY_COUNT'),(789,'MASTER_SSL'),(790,'MASTER_SSL_CA'),(791,'MASTER_SSL_CERT'),(792,'MASTER_SSL_CIPHER'),(793,'MASTER_SSL_CRL'),(794,'MASTER_SSL_CRLPATH'),(795,'MASTER_SSL_KEY'),(796,'MASTER_SSL_VERIFY_SERVER_CERT'),(797,'MASTER_TLS_CIPHERSUITES'),(798,'MASTER_TLS_VERSION'),(799,'MASTER_USER'),(800,'MASTER_ZSTD_COMPRESSION_LEVEL'),(249,'MATCH'),(474,'MAX'),(893,'MAX_CONNECTIONS_PER_HOUR'),(894,'MAX_QUERIES_PER_HOUR'),(611,'MAX_ROWS'),(684,'MAX_SIZE'),(895,'MAX_UPDATES_PER_HOUR'),(896,'MAX_USER_CONNECTIONS'),(395,'MBRCONTAINS'),(396,'MBRCOVEREDBY'),(397,'MBRCOVERS'),(398,'MBRDISJOINT'),(399,'MBREQUALS'),(400,'MBRINTERSECTS'),(401,'MBROVERLAPS'),(402,'MBRTOUCHES'),(403,'MBRWITHIN'),(273,'MD5'),(933,'MEDIUM'),(432,'MEMBER'),(729,'MEMORY'),(670,'MERGE'),(871,'MESSAGE_TEXT'),(158,'MICROSECOND'),(210,'MID'),(24,'MIDDLEINT'),(475,'MIN'),(138,'MINUTE'),(139,'MINUTE_SECOND'),(612,'MIN_ROWS'),(89,'MOD'),(250,'MODE'),(613,'MODIFY'),(140,'MONTH'),(159,'MONTHNAME'),(671,'MRG_MYISAM'),(339,'MULTILINESTRING'),(340,'MULTIPOINT'),(341,'MULTIPOLYGON'),(955,'MUTEX'),(672,'MYISAM'),(872,'MYSQL_ERRNO'),(655,'NAME'),(948,'NAMES'),(540,'NAME_CONST'),(40,'NATIONAL'),(743,'NATURAL'),(41,'NCHAR'),(673,'NDB'),(674,'NDBCLUSTER'),(801,'NETWORK_NAMESPACE'),(897,'NEVER'),(700,'NEXT'),(571,'NO'),(685,'NODEGROUP'),(898,'NONE'),(64,'NOT'),(160,'NOW'),(931,'NO_WRITE_TO_BINLOG'),(490,'NTH_VALUE'),(491,'NTILE'),(70,'NULL'),(83,'NULLIF'),(873,'NUMBER'),(30,'NUMERIC'),(44,'NVARCHAR'),(211,'OCT'),(212,'OCTET_LENGTH'),(433,'OF'),(730,'OFFSET'),(899,'OLD'),(558,'ON'),(548,'ONLY'),(701,'OPEN'),(614,'OPTIMIZE'),(975,'OPTIMIZER_COSTS'),(919,'OPTION'),(900,'OPTIONAL'),(719,'OPTIONALLY'),(579,'OPTIONS'),(73,'OR'),(213,'ORD'),(470,'ORDER'),(656,'ORGANIZATION'),(744,'OUTER'),(731,'OUTFILE'),(649,'OWNER'),(615,'PACK_KEYS'),(616,'PARSER'),(675,'PARTIAL'),(617,'PARTITION'),(618,'PARTITIONING'),(619,'PASSWORD'),(901,'PASSWORD_LOCK_TIME'),(427,'PATH)'),(492,'PERCENT_RANK'),(161,'PERIOD_ADD'),(162,'PERIOD_DIFF'),(945,'PERSIST'),(946,'PERSIST_ONLY'),(109,'PI'),(942,'PLUGIN'),(966,'PLUGINS'),(841,'PLUGIN_DIR'),(342,'POINT'),(343,'POLYGON'),(650,'PORT'),(214,'POSITION'),(110,'POW'),(111,'POWER'),(34,'PRECISION'),(768,'PREPARE'),(559,'PRESERVE'),(702,'PREV'),(620,'PRIMARY'),(920,'PRIVILEGES'),(802,'PRIVILEGE_CHECKS_USER'),(578,'PROCEDURE'),(921,'PROCESS'),(956,'PROCESSLIST'),(967,'PROFILE'),(968,'PROFILES'),(925,'PROXY'),(497,'PS_CURRENT_THREAD_ID'),(498,'PS_THREAD_ID'),(773,'PURGE'),(163,'QUARTER'),(251,'QUERY'),(692,'QUICK'),(215,'QUOTE'),(112,'RADIANS'),(113,'RAND'),(902,'RANDOM'),(274,'RANDOM_BYTES'),(493,'RANK'),(549,'READ'),(35,'REAL'),(621,'REBUILD'),(769,'RECOVER'),(572,'REDO_LOG'),(676,'REDUNDANT'),(657,'REFERENCE'),(677,'REFERENCES'),(241,'REGEXP'),(243,'REGEXP_INSTR'),(244,'REGEXP_LIKE'),(245,'REGEXP_REPLACE'),(246,'REGEXP_SUBSTR'),(903,'REGISTRATION'),(976,'RELAY'),(969,'RELAYLOG'),(803,'RELAY_LOG_FILE'),(804,'RELAY_LOG_POS'),(750,'RELEASE'),(286,'RELEASE_ALL_LOCKS'),(287,'RELEASE_LOCK'),(573,'RELOAD'),(622,'REMOVE'),(560,'RENAME'),(623,'REORGANIZE'),(624,'REPAIR'),(216,'REPEAT'),(764,'REPEATABLE'),(217,'REPLACE'),(838,'REPLICA'),(970,'REPLICAS'),(806,'REPLICATE_DO_DB'),(807,'REPLICATE_DO_TABLE'),(808,'REPLICATE_IGNORE_DB'),(809,'REPLICATE_IGNORE_TABLE'),(810,'REPLICATE_REWRITE_DB'),(811,'REPLICATE_WILD_DO_TABLE'),(812,'REPLICATE_WILD_IGNORE_TABLE'),(813,'REPLICATION'),(904,'REQUIRE'),(774,'RESET'),(878,'RESIGNAL'),(928,'RESOURCE'),(981,'RESTART'),(680,'RESTRICT'),(905,'RETAIN'),(855,'RETURN'),(874,'RETURNED_SQLSTATE'),(937,'RETURNS'),(906,'REUSE'),(218,'REVERSE'),(926,'REVOKE'),(219,'RIGHT'),(242,'RLIKE'),(907,'ROLE'),(299,'ROLES_GRAPHML'),(574,'ROLLBACK'),(114,'ROUND'),(708,'ROW'),(723,'ROWS'),(300,'ROW_COUNT'),(625,'ROW_FORMAT'),(494,'ROW_NUMBER'),(220,'RPAD'),(221,'RTRIM'),(756,'SAVEPOINT'),(561,'SCHEDULE'),(301,'SCHEMA'),(957,'SCHEMAS'),(875,'SCHEMA_NAME'),(141,'SECOND'),(164,'SEC_TO_TIME'),(709,'SELECT'),(471,'SEPARATOR'),(3,'SERIAL'),(765,'SERIALIZABLE'),(580,'SERVER'),(766,'SESSION'),(302,'SESSION_USER'),(550,'SET'),(275,'SHA'),(276,'SHA1'),(277,'SHA2'),(732,'SHARE'),(958,'SHOW'),(922,'SHUTDOWN'),(115,'SIGN'),(880,'SIGNAL'),(258,'SIGNED'),(116,'SIN'),(562,'SLAVE'),(541,'SLEEP'),(977,'SLOW'),(751,'SNAPSHOT'),(651,'SOCKET'),(938,'SONAME'),(222,'SOUNDEX'),(224,'SOUNDS'),(814,'SOURCE'),(815,'SOURCE_AUTO_POSITION'),(816,'SOURCE_BIND'),(817,'SOURCE_COMPRESSION_ALGORITHMS'),(818,'SOURCE_CONNECT_RETRY'),(819,'SOURCE_HEARTBEAT_PERIOD'),(820,'SOURCE_HOST'),(821,'SOURCE_LOG_FILE'),(822,'SOURCE_LOG_POS'),(823,'SOURCE_PASSWORD'),(824,'SOURCE_PORT'),(459,'SOURCE_POS_WAIT'),(825,'SOURCE_RETRY_COUNT'),(826,'SOURCE_SSL'),(827,'SOURCE_SSL_CA'),(828,'SOURCE_SSL_CERT'),(829,'SOURCE_SSL_CIPHER'),(830,'SOURCE_SSL_CRL'),(831,'SOURCE_SSL_CRLPATH'),(832,'SOURCE_SSL_KEY'),(833,'SOURCE_SSL_VERIFY_SERVER_CERT'),(834,'SOURCE_TLS_CIPHERSUITES'),(835,'SOURCE_TLS_VERSION'),(836,'SOURCE_USER'),(837,'SOURCE_ZSTD_COMPRESSION_LEVEL'),(225,'SPACE'),(626,'SPATIAL'),(879,'SQLSTATE'),(842,'SQL_AFTER_GTIDS'),(843,'SQL_AFTER_MTS_GAPS'),(844,'SQL_BEFORE_GTIDS'),(733,'SQL_BIG_RESULT'),(734,'SQL_BUFFER_RESULT'),(735,'SQL_CALC_FOUND_ROWS'),(775,'SQL_LOG_BIN'),(736,'SQL_NO_CACHE'),(737,'SQL_SMALL_RESULT'),(845,'SQL_THREAD'),(117,'SQRT'),(908,'SSL'),(752,'START'),(720,'STARTING'),(646,'STARTS'),(278,'STATEMENT_DIGEST'),(279,'STATEMENT_DIGEST_TEXT'),(627,'STATS_AUTO_RECALC'),(628,'STATS_PERSISTENT'),(629,'STATS_SAMPLE_PAGES'),(959,'STATUS'),(476,'STD'),(477,'STDDEV'),(478,'STDDEV_POP'),(479,'STDDEV_SAMP'),(846,'STOP'),(964,'STORAGE'),(678,'STORED'),(738,'STRAIGHT_JOIN'),(240,'STRCMP'),(939,'STRING'),(165,'STR_TO_DATE'),(365,'ST_AREA'),(344,'ST_ASBINARY'),(408,'ST_ASGEOJSON'),(346,'ST_ASTEXT'),(345,'ST_ASWKB'),(347,'ST_ASWKT'),(373,'ST_BUFFER'),(374,'ST_BUFFER_STRATEGY'),(366,'ST_CENTROID'),(410,'ST_COLLECT'),(384,'ST_CONTAINS'),(375,'ST_CONVEXHULL'),(385,'ST_CROSSES'),(376,'ST_DIFFERENCE'),(349,'ST_DIMENSION'),(386,'ST_DISJOINT'),(387,'ST_DISTANCE'),(411,'ST_DISTANCE_SPHERE'),(359,'ST_ENDPOINT'),(350,'ST_ENVELOPE'),(388,'ST_EQUALS'),(367,'ST_EXTERIORRING'),(389,'ST_FRECHETDISTANCE'),(404,'ST_GEOHASH'),(306,'ST_GEOMCOLLFROMTEXT'),(321,'ST_GEOMCOLLFROMWKB'),(307,'ST_GEOMETRYCOLLECTIONFROMTEXT'),(322,'ST_GEOMETRYCOLLECTIONFROMWKB'),(308,'ST_GEOMETRYFROMTEXT'),(323,'ST_GEOMETRYFROMWKB'),(371,'ST_GEOMETRYN'),(351,'ST_GEOMETRYTYPE'),(409,'ST_GEOMFROMGEOJSON'),(309,'ST_GEOMFROMTEXT'),(324,'ST_GEOMFROMWKB'),(390,'ST_HAUSDORFFDISTANCE'),(368,'ST_INTERIORRINGN'),(377,'ST_INTERSECTION'),(391,'ST_INTERSECTS'),(360,'ST_ISCLOSED'),(352,'ST_ISEMPTY'),(353,'ST_ISSIMPLE'),(412,'ST_ISVALID'),(405,'ST_LATFROMGEOHASH'),(355,'ST_LATITUDE'),(361,'ST_LENGTH'),(310,'ST_LINEFROMTEXT'),(325,'ST_LINEFROMWKB'),(378,'ST_LINEINTERPOLATEPOINT'),(379,'ST_LINEINTERPOLATEPOINTS'),(311,'ST_LINESTRINGFROMTEXT'),(326,'ST_LINESTRINGFROMWKB'),(406,'ST_LONGFROMGEOHASH'),(356,'ST_LONGITUDE'),(413,'ST_MAKEENVELOPE'),(312,'ST_MLINEFROMTEXT'),(327,'ST_MLINEFROMWKB'),(314,'ST_MPOINTFROMTEXT'),(329,'ST_MPOINTFROMWKB'),(316,'ST_MPOLYFROMTEXT'),(331,'ST_MPOLYFROMWKB'),(313,'ST_MULTILINESTRINGFROMTEXT'),(328,'ST_MULTILINESTRINGFROMWKB'),(315,'ST_MULTIPOINTFROMTEXT'),(330,'ST_MULTIPOINTFROMWKB'),(317,'ST_MULTIPOLYGONFROMTEXT'),(332,'ST_MULTIPOLYGONFROMWKB'),(372,'ST_NUMGEOMETRIES'),(369,'ST_NUMINTERIORRING'),(370,'ST_NUMINTERIORRINGS'),(362,'ST_NUMPOINTS'),(392,'ST_OVERLAPS'),(380,'ST_POINTATDISTANCE'),(407,'ST_POINTFROMGEOHASH'),(318,'ST_POINTFROMTEXT'),(333,'ST_POINTFROMWKB'),(363,'ST_POINTN'),(319,'ST_POLYFROMTEXT'),(334,'ST_POLYFROMWKB'),(320,'ST_POLYGONFROMTEXT'),(335,'ST_POLYGONFROMWKB'),(414,'ST_SIMPLIFY'),(354,'ST_SRID'),(364,'ST_STARTPOINT'),(348,'ST_SWAPXY'),(381,'ST_SYMDIFFERENCE'),(393,'ST_TOUCHES'),(382,'ST_TRANSFORM'),(383,'ST_UNION'),(415,'ST_VALIDATE'),(394,'ST_WITHIN'),(357,'ST_X'),(358,'ST_Y'),(876,'SUBCLASS_ORIGIN'),(166,'SUBDATE'),(909,'SUBJECT'),(226,'SUBSTR'),(227,'SUBSTRING'),(228,'SUBSTRING_INDEX'),(167,'SUBTIME'),(480,'SUM'),(923,'SUPER'),(168,'SYSDATE'),(658,'SYSTEM'),(303,'SYSTEM_USER'),(54,'TABLE'),(759,'TABLES'),(630,'TABLESPACE'),(877,'TABLE_NAME'),(118,'TAN'),(688,'TEMPORARY'),(721,'TERMINATED'),(79,'THEN'),(929,'THREAD_PRIORITY'),(38,'TIME'),(170,'TIMEDIFF'),(37,'TIMESTAMP'),(171,'TIMESTAMPADD'),(172,'TIMESTAMPDIFF'),(259,'TIMEZONE'),(173,'TIME_FORMAT'),(174,'TIME_TO_SEC'),(575,'TLS'),(638,'TO'),(229,'TO_BASE64'),(175,'TO_DAYS'),(176,'TO_SECONDS'),(984,'TRADITIONAL'),(233,'TRAILING'),(753,'TRANSACTION'),(985,'TREE'),(687,'TRIGGER'),(960,'TRIGGERS'),(234,'TRIM'),(16,'TRUE'),(119,'TRUNCATE'),(631,'TYPE'),(235,'UCASE'),(910,'UNBOUNDED'),(767,'UNCOMMITTED'),(280,'UNCOMPRESS'),(281,'UNCOMPRESSED_LENGTH'),(639,'UNDO'),(236,'UNHEX'),(943,'UNINSTALL'),(632,'UNION'),(633,'UNIQUE'),(177,'UNIX_TIMESTAMP'),(927,'UNKNOWN'),(758,'UNLOCK'),(911,'UNREGISTER'),(20,'UNSIGNED'),(854,'UNTIL'),(681,'UPDATE'),(262,'UPDATEXML'),(634,'UPGRADE'),(237,'UPPER'),(924,'USAGE'),(686,'USE'),(304,'USER'),(978,'USER_RESOURCES'),(935,'USE_FRM'),(693,'USING'),(178,'UTC_DATE'),(179,'UTC_TIME'),(180,'UTC_TIMESTAMP'),(542,'UUID'),(543,'UUID_SHORT'),(544,'UUID_TO_BIN'),(282,'VALIDATE_PASSWORD_STRENGTH'),(4,'VALUE'),(545,'VALUES'),(45,'VARCHARACTER'),(947,'VARIABLE'),(961,'VARIABLES'),(483,'VARIANCE'),(46,'VARYING'),(481,'VAR_POP'),(482,'VAR_SAMP'),(930,'VCPU'),(305,'VERSION'),(641,'VIEW'),(679,'VIRTUAL'),(635,'VISIBLE'),(640,'WAIT'),(456,'WAIT_FOR_EXECUTED_GTID_SET'),(457,'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS'),(962,'WARNINGS'),(181,'WEEK'),(182,'WEEKDAY'),(183,'WEEKOFYEAR'),(238,'WEIGHT_STRING'),(80,'WHEN'),(694,'WHERE'),(856,'WHILE'),(252,'WITH'),(754,'WORK'),(652,'WRAPPER'),(755,'WRITE'),(912,'X509'),(770,'XA'),(74,'XOR'),(142,'YEAR'),(184,'YEARWEEK'),(143,'YEAR_MONTH'),(21,'ZEROFILL'),(265,'^'),(263,'|'),(268,'~');

--
-- Table structure for table `help_relation`
--

CREATE TABLE `help_relation` (
  `help_topic_id` int unsigned NOT NULL,
  `help_keyword_id` int unsigned NOT NULL,
  PRIMARY KEY (`help_keyword_id`,`help_topic_id`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='keyword-topic relation';

--
-- Dumping data for table `help_relation`
--

INSERT INTO `help_relation` VALUES (0,0),(1,1),(2,2),(485,2),(502,2),(503,2),(510,2),(513,2),(514,2),(522,2),(523,2),(547,2),(554,2),(592,2),(610,2),(612,2),(618,2),(620,2),(2,3),(522,3),(2,4),(547,4),(554,4),(608,4),(609,4),(3,5),(700,5),(4,6),(5,7),(6,8),(7,9),(8,10),(9,11),(10,12),(11,13),(12,14),(13,15),(14,15),(13,16),(14,16),(16,17),(17,17),(16,18),(240,18),(16,19),(16,20),(20,20),(22,20),(23,20),(25,20),(26,20),(242,20),(16,21),(20,21),(22,21),(23,21),(25,21),(26,21),(18,22),(19,23),(19,24),(20,25),(20,26),(242,26),(630,26),(22,27),(23,28),(23,29),(522,29),(23,30),(24,31),(242,31),(630,31),(25,32),(26,33),(26,34),(26,35),(630,35),(28,36),(129,36),(131,36),(242,36),(30,37),(165,37),(31,38),(163,38),(242,38),(33,39),(35,39),(502,39),(503,39),(510,39),(513,39),(514,39),(522,39),(551,39),(552,39),(555,39),(638,39),(639,39),(641,39),(645,39),(33,40),(35,40),(33,41),(34,42),(34,43),(184,43),(242,43),(35,44),(35,45),(35,46),(44,47),(44,48),(53,49),(510,49),(511,49),(524,49),(610,49),(53,50),(502,50),(503,50),(504,50),(505,50),(506,50),(507,50),(508,50),(509,50),(510,50),(511,50),(512,50),(610,50),(615,50),(621,50),(53,51),(513,51),(514,51),(515,51),(516,51),(517,51),(518,51),(519,51),(520,51),(521,51),(522,51),(524,51),(525,51),(526,51),(611,51),(612,51),(622,51),(630,51),(641,51),(649,51),(650,51),(651,51),(652,51),(653,51),(654,51),(656,51),(53,52),(510,52),(516,52),(522,52),(530,52),(557,52),(641,52),(667,52),(689,52),(692,52),(53,53),(510,53),(522,53),(523,53),(547,53),(53,54),(510,54),(522,54),(535,54),(539,54),(540,54),(546,54),(548,54),(558,54),(625,54),(626,54),(627,54),(628,54),(629,54),(641,54),(654,54),(683,54),(54,55),(79,55),(55,56),(56,57),(57,58),(58,59),(59,60),(60,61),(61,62),(75,62),(61,63),(62,63),(62,64),(66,64),(69,64),(71,64),(74,64),(232,64),(234,64),(513,64),(514,64),(515,64),(521,64),(611,64),(612,64),(63,65),(510,65),(64,66),(65,67),(66,67),(240,67),(555,67),(644,67),(647,67),(648,67),(667,67),(677,67),(67,68),(131,68),(515,68),(610,68),(612,68),(68,69),(69,69),(70,69),(71,69),(70,70),(71,70),(523,70),(72,71),(73,72),(76,73),(521,73),(77,74),(78,75),(80,76),(593,76),(80,77),(593,77),(80,78),(572,78),(590,78),(593,78),(594,78),(597,78),(598,78),(600,78),(80,79),(593,79),(594,79),(80,80),(593,80),(81,81),(513,81),(514,81),(515,81),(521,81),(527,81),(528,81),(529,81),(533,81),(534,81),(535,81),(538,81),(594,81),(610,81),(611,81),(612,81),(613,81),(614,81),(617,81),(631,81),(694,81),(82,82),(83,83),(84,84),(85,85),(86,85),(87,86),(88,87),(89,88),(90,89),(109,89),(91,90),(92,91),(93,92),(94,93),(95,94),(96,95),(97,96),(98,97),(99,98),(100,99),(101,100),(102,101),(103,102),(104,103),(105,104),(106,105),(107,106),(108,107),(109,108),(110,109),(111,110),(112,111),(113,112),(114,113),(115,114),(116,115),(117,116),(118,117),(119,118),(120,119),(510,119),(540,119),(121,120),(122,121),(123,122),(124,123),(125,124),(126,125),(127,126),(128,127),(130,128),(131,129),(131,130),(133,130),(131,131),(134,131),(610,131),(612,131),(131,132),(131,133),(131,134),(131,135),(143,135),(131,136),(131,137),(131,138),(150,138),(131,139),(131,140),(151,140),(131,141),(157,141),(131,142),(179,142),(242,142),(131,143),(132,144),(135,145),(136,146),(137,147),(138,148),(139,149),(140,150),(141,151),(142,152),(144,153),(145,154),(146,155),(147,156),(148,157),(149,158),(152,159),(153,160),(154,161),(155,162),(156,163),(158,164),(159,165),(160,166),(161,167),(162,168),(163,169),(165,169),(214,169),(505,169),(518,169),(519,169),(531,169),(532,169),(630,169),(631,169),(641,169),(652,169),(664,169),(665,169),(164,170),(166,171),(167,172),(168,173),(169,174),(170,175),(171,176),(172,177),(173,178),(174,179),(175,180),(176,181),(177,182),(178,183),(180,184),(181,185),(182,186),(183,187),(185,188),(186,189),(187,190),(188,191),(189,192),(190,193),(191,194),(192,195),(193,196),(697,196),(698,196),(699,196),(194,197),(195,198),(196,199),(547,199),(548,199),(549,199),(197,200),(198,201),(199,202),(557,202),(200,203),(201,204),(202,205),(203,206),(204,207),(205,208),(206,209),(207,210),(208,211),(209,212),(210,213),(211,214),(212,215),(213,216),(598,216),(214,217),(521,217),(551,217),(552,217),(554,217),(610,217),(619,217),(215,218),(216,219),(557,219),(217,220),(218,221),(219,222),(220,223),(232,223),(641,223),(647,223),(648,223),(220,224),(221,225),(222,226),(223,227),(224,228),(225,229),(226,230),(226,231),(542,231),(546,231),(555,231),(641,231),(644,231),(647,231),(648,231),(667,231),(677,231),(226,232),(226,233),(226,234),(227,235),(228,236),(229,237),(230,238),(231,239),(233,240),(234,241),(235,242),(236,243),(237,244),(238,245),(239,246),(240,247),(240,248),(240,249),(240,250),(555,250),(240,251),(691,251),(240,252),(510,252),(516,252),(522,252),(610,252),(612,252),(615,252),(690,252),(241,253),(242,253),(573,253),(574,253),(642,253),(643,253),(690,253),(242,254),(242,255),(242,256),(242,257),(697,257),(698,257),(699,257),(242,258),(242,259),(243,260),(244,261),(245,262),(246,263),(247,264),(248,265),(249,266),(250,267),(251,268),(252,269),(253,270),(254,271),(255,272),(256,273),(257,274),(258,275),(258,276),(259,277),(260,278),(261,279),(262,280),(263,281),(264,282),(265,283),(266,284),(267,285),(268,286),(269,287),(270,288),(271,289),(638,289),(639,289),(272,290),(273,291),(641,291),(646,291),(274,292),(275,293),(276,294),(504,294),(515,294),(277,295),(502,295),(503,295),(513,295),(514,295),(520,295),(527,295),(528,295),(641,295),(649,295),(650,295),(278,296),(279,297),(280,298),(281,299),(282,300),(607,300),(283,301),(502,301),(503,301),(513,301),(514,301),(527,301),(528,301),(641,301),(649,301),(650,301),(284,302),(285,303),(286,304),(520,304),(582,304),(583,304),(610,304),(612,304),(614,304),(616,304),(617,304),(622,304),(656,304),(287,305),(288,306),(288,307),(289,308),(289,309),(290,310),(290,311),(291,312),(291,313),(292,314),(292,315),(293,316),(293,317),(294,318),(295,319),(295,320),(296,321),(296,322),(297,323),(297,324),(298,325),(298,326),(299,327),(299,328),(300,329),(300,330),(301,331),(301,332),(302,333),(303,334),(303,335),(304,336),(305,337),(306,338),(307,339),(308,340),(309,341),(310,342),(311,343),(312,344),(312,345),(313,346),(313,347),(314,348),(315,349),(316,350),(317,351),(318,352),(319,353),(320,354),(321,355),(322,356),(323,357),(324,358),(325,359),(326,360),(327,361),(328,362),(329,363),(330,364),(331,365),(332,366),(333,367),(334,368),(335,369),(335,370),(336,371),(337,372),(338,373),(339,374),(340,375),(341,376),(342,377),(343,378),(344,379),(345,380),(346,381),(347,382),(348,383),(349,384),(350,385),(351,386),(352,387),(353,388),(354,389),(355,390),(356,391),(357,392),(358,393),(359,394),(360,395),(361,396),(362,397),(363,398),(364,399),(365,400),(366,401),(367,402),(368,403),(369,404),(370,405),(371,406),(372,407),(373,408),(374,409),(375,410),(376,411),(377,412),(378,413),(379,414),(380,415),(381,416),(382,417),(383,418),(384,419),(385,420),(386,421),(387,422),(388,422),(387,423),(387,424),(388,425),(388,426),(388,427),(389,428),(390,429),(391,430),(392,431),(393,432),(393,433),(394,434),(395,435),(396,436),(397,437),(398,438),(399,439),(400,440),(401,441),(402,442),(403,443),(404,444),(405,445),(406,446),(407,447),(408,448),(409,449),(410,450),(411,451),(412,452),(413,453),(414,454),(415,455),(416,456),(417,457),(418,458),(419,459),(420,460),(420,461),(425,461),(426,461),(429,461),(430,461),(435,461),(544,461),(550,461),(555,461),(560,461),(421,462),(422,463),(423,464),(424,465),(425,465),(662,465),(687,465),(426,466),(555,466),(426,467),(510,467),(522,467),(542,467),(551,467),(552,467),(553,467),(555,467),(559,467),(610,467),(612,467),(426,468),(555,468),(697,468),(698,468),(699,468),(426,469),(426,470),(510,470),(542,470),(553,470),(555,470),(558,470),(559,470),(561,470),(426,471),(427,472),(428,473),(429,474),(430,475),(431,476),(432,477),(433,478),(434,479),(435,480),(436,481),(437,482),(438,483),(439,484),(440,485),(441,486),(442,487),(443,488),(444,489),(445,490),(446,491),(447,492),(448,493),(449,494),(450,495),(451,496),(452,497),(453,498),(454,499),(455,500),(456,501),(457,502),(458,503),(459,504),(460,505),(461,506),(462,507),(463,508),(464,509),(465,510),(466,511),(467,512),(468,513),(469,514),(470,515),(471,516),(472,517),(473,518),(474,519),(475,520),(476,521),(477,522),(478,523),(479,524),(480,525),(481,526),(482,527),(483,528),(484,529),(486,530),(487,531),(488,532),(489,533),(490,534),(491,535),(492,536),(493,537),(494,538),(495,539),(496,540),(497,541),(498,542),(499,543),(500,544),(501,545),(547,545),(554,545),(561,545),(502,546),(503,546),(510,546),(513,546),(514,546),(522,546),(502,547),(503,547),(510,547),(513,547),(514,547),(522,547),(502,548),(503,548),(562,548),(563,548),(564,548),(565,548),(571,548),(572,548),(502,549),(503,549),(545,549),(562,549),(563,549),(564,549),(565,549),(570,549),(571,549),(572,549),(690,549),(502,550),(503,550),(510,550),(513,550),(514,550),(522,550),(523,550),(547,550),(551,550),(552,550),(554,550),(555,550),(559,550),(562,550),(563,550),(564,550),(565,550),(576,550),(608,550),(609,550),(610,550),(618,550),(619,550),(620,550),(624,550),(637,550),(638,550),(639,550),(640,550),(641,550),(645,550),(504,551),(510,551),(515,551),(516,551),(522,551),(524,551),(610,551),(612,551),(504,552),(515,552),(504,553),(515,553),(504,554),(510,554),(515,554),(621,554),(622,554),(504,555),(515,555),(543,555),(600,555),(504,556),(510,556),(515,556),(621,556),(622,556),(504,557),(515,557),(529,557),(651,557),(504,558),(506,558),(515,558),(523,558),(557,558),(504,559),(515,559),(504,560),(510,560),(511,560),(539,560),(616,560),(504,561),(515,561),(504,562),(515,562),(581,562),(583,562),(585,562),(679,562),(681,562),(693,562),(506,563),(644,563),(688,563),(506,564),(577,564),(579,564),(580,564),(581,564),(582,564),(583,564),(584,564),(585,564),(677,564),(680,564),(681,564),(690,564),(506,565),(690,565),(506,566),(555,566),(577,566),(579,566),(580,566),(581,566),(582,566),(583,566),(584,566),(585,566),(602,566),(605,566),(606,566),(619,566),(624,566),(641,566),(677,566),(680,566),(681,566),(690,566),(697,566),(698,566),(699,566),(506,567),(522,567),(641,567),(506,568),(569,568),(506,569),(506,570),(573,570),(574,570),(575,570),(577,570),(642,570),(643,570),(668,570),(693,570),(506,571),(522,571),(523,571),(506,572),(506,573),(615,573),(506,574),(562,574),(563,574),(564,574),(565,574),(566,574),(567,574),(568,574),(572,574),(506,575),(507,576),(517,576),(524,576),(555,576),(621,576),(622,576),(623,576),(624,576),(507,577),(517,577),(524,577),(508,578),(518,578),(519,578),(531,578),(532,578),(641,578),(653,578),(672,578),(673,578),(509,579),(520,579),(509,580),(520,580),(533,580),(510,581),(510,582),(510,583),(625,583),(697,583),(698,583),(699,583),(510,584),(511,584),(522,584),(524,584),(510,585),(510,586),(522,586),(510,587),(577,587),(578,587),(579,587),(510,588),(522,588),(626,588),(510,589),(522,589),(627,589),(510,590),(510,591),(522,591),(551,591),(641,591),(647,591),(648,591),(510,592),(522,592),(510,593),(522,593),(691,593),(697,593),(698,593),(699,593),(510,594),(522,594),(510,595),(520,595),(522,595),(551,595),(510,596),(522,596),(510,597),(522,597),(510,598),(610,598),(510,599),(511,599),(527,599),(528,599),(529,599),(530,599),(531,599),(532,599),(533,599),(534,599),(535,599),(536,599),(537,599),(538,599),(588,599),(589,599),(610,599),(613,599),(614,599),(623,599),(631,599),(510,600),(511,600),(522,600),(524,600),(536,600),(641,600),(660,600),(690,600),(510,601),(510,602),(522,602),(545,602),(510,603),(520,603),(522,603),(523,603),(510,604),(516,604),(522,604),(510,605),(546,605),(551,605),(510,606),(522,606),(510,607),(516,607),(522,607),(510,608),(641,608),(667,608),(510,609),(522,609),(510,610),(555,610),(569,610),(570,610),(610,610),(612,610),(690,610),(510,611),(522,611),(510,612),(522,612),(510,613),(610,613),(510,614),(628,614),(510,615),(522,615),(510,616),(516,616),(522,616),(510,617),(522,617),(542,617),(547,617),(551,617),(554,617),(555,617),(557,617),(689,617),(692,617),(510,618),(510,619),(520,619),(582,619),(583,619),(610,619),(612,619),(619,619),(510,620),(510,621),(510,622),(510,623),(510,624),(629,624),(510,625),(522,625),(510,626),(516,626),(521,626),(534,626),(510,627),(522,627),(510,628),(522,628),(510,629),(522,629),(510,630),(511,630),(524,630),(536,630),(510,631),(622,631),(510,632),(553,632),(560,632),(510,633),(510,634),(626,634),(510,635),(516,635),(522,635),(511,636),(524,636),(511,637),(524,637),(511,638),(566,638),(567,638),(568,638),(573,638),(574,638),(577,638),(579,638),(619,638),(511,639),(524,639),(536,639),(606,639),(511,640),(524,640),(512,641),(526,641),(538,641),(513,642),(514,642),(515,642),(521,642),(527,642),(528,642),(529,642),(533,642),(534,642),(535,642),(538,642),(610,642),(611,642),(612,642),(613,642),(614,642),(617,642),(631,642),(694,642),(515,643),(515,644),(515,645),(515,646),(516,647),(520,648),(520,649),(520,650),(520,651),(520,652),(521,653),(521,654),(521,655),(521,656),(521,657),(534,657),(521,658),(534,658),(622,658),(522,659),(523,659),(522,660),(522,661),(523,661),(535,661),(538,661),(522,662),(522,663),(522,664),(551,664),(522,665),(523,665),(542,665),(522,666),(522,667),(522,668),(641,668),(647,668),(648,668),(674,668),(684,668),(522,669),(522,670),(522,671),(522,672),(522,673),(522,674),(522,675),(522,676),(522,677),(523,677),(615,677),(522,678),(522,679),(523,680),(535,680),(538,680),(523,681),(547,681),(555,681),(559,681),(524,682),(524,683),(524,684),(524,685),(524,686),(557,686),(701,686),(525,687),(537,687),(641,687),(535,688),(541,689),(542,690),(545,690),(553,690),(555,690),(558,690),(559,690),(561,690),(644,690),(677,690),(542,691),(547,691),(551,691),(552,691),(554,691),(559,691),(570,691),(542,692),(626,692),(629,692),(542,693),(557,693),(587,693),(666,693),(542,694),(545,694),(559,694),(647,694),(648,694),(667,694),(544,695),(550,695),(555,695),(560,695),(580,695),(581,695),(610,695),(615,695),(617,695),(618,695),(620,695),(689,695),(692,695),(544,696),(553,696),(620,696),(545,697),(601,697),(545,698),(606,698),(545,699),(545,700),(545,701),(604,701),(641,701),(669,701),(545,702),(547,703),(549,703),(554,703),(547,704),(547,705),(555,705),(547,706),(551,706),(552,706),(555,706),(557,706),(559,706),(617,706),(692,706),(547,707),(553,707),(554,707),(555,707),(692,707),(547,708),(561,708),(547,709),(548,709),(553,709),(554,709),(555,709),(697,709),(698,709),(699,709),(550,710),(553,710),(551,711),(552,711),(551,712),(551,713),(551,714),(641,714),(647,714),(648,714),(551,715),(552,715),(551,716),(552,716),(551,717),(692,717),(551,718),(552,718),(570,718),(625,718),(628,718),(629,718),(690,718),(551,719),(551,720),(551,721),(552,722),(610,722),(612,722),(552,723),(555,724),(557,724),(570,724),(610,724),(612,724),(615,724),(555,725),(555,726),(555,727),(555,728),(557,728),(555,729),(555,730),(555,731),(555,732),(555,733),(555,734),(555,735),(555,736),(555,737),(555,738),(557,738),(556,739),(557,740),(557,741),(621,741),(623,741),(557,742),(557,743),(557,744),(562,745),(563,745),(564,745),(565,745),(562,746),(563,746),(564,746),(565,746),(572,746),(590,746),(562,747),(563,747),(564,747),(565,747),(562,748),(563,748),(564,748),(565,748),(572,748),(562,749),(563,749),(564,749),(565,749),(572,749),(562,750),(563,750),(564,750),(565,750),(566,750),(567,750),(568,750),(572,750),(562,751),(563,751),(564,751),(565,751),(572,751),(562,752),(563,752),(564,752),(565,752),(572,752),(582,752),(583,752),(562,753),(563,753),(564,753),(565,753),(571,753),(562,754),(563,754),(564,754),(565,754),(562,755),(563,755),(564,755),(565,755),(570,755),(571,755),(572,755),(566,756),(567,756),(568,756),(569,757),(569,758),(570,758),(610,758),(612,758),(570,759),(641,759),(669,759),(684,759),(690,759),(571,760),(571,761),(637,761),(682,761),(686,761),(571,762),(571,763),(571,764),(571,765),(571,766),(637,766),(682,766),(686,766),(571,767),(572,768),(586,768),(588,768),(589,768),(572,769),(572,770),(573,771),(574,771),(573,772),(574,772),(641,772),(642,772),(643,772),(690,772),(573,773),(574,773),(575,774),(580,774),(581,774),(693,774),(694,774),(576,775),(577,776),(579,776),(577,777),(579,777),(577,778),(577,779),(577,780),(577,781),(577,782),(577,783),(577,784),(577,785),(577,786),(577,787),(577,788),(577,789),(577,790),(577,791),(577,792),(577,793),(577,794),(577,795),(577,796),(577,797),(577,798),(577,799),(577,800),(577,801),(579,801),(577,802),(579,802),(577,803),(579,803),(577,804),(579,804),(578,805),(578,806),(578,807),(578,808),(578,809),(578,810),(578,811),(578,812),(578,813),(579,813),(615,813),(579,814),(579,815),(579,816),(579,817),(579,818),(579,819),(579,820),(579,821),(579,822),(579,823),(579,824),(579,825),(579,826),(579,827),(579,828),(579,829),(579,830),(579,831),(579,832),(579,833),(579,834),(579,835),(579,836),(579,837),(580,838),(582,838),(584,838),(680,838),(693,838),(582,839),(583,839),(582,840),(583,840),(584,840),(585,840),(582,841),(583,841),(582,842),(583,842),(582,843),(583,843),(582,844),(583,844),(582,845),(583,845),(584,845),(585,845),(584,846),(585,846),(587,847),(615,847),(588,848),(589,848),(592,849),(602,849),(605,849),(606,849),(594,850),(595,851),(596,852),(597,853),(598,854),(599,855),(600,856),(602,857),(603,858),(605,859),(606,860),(606,861),(607,862),(608,862),(609,862),(607,863),(608,863),(609,863),(607,864),(608,864),(609,864),(607,865),(608,865),(609,865),(607,866),(608,866),(609,866),(607,867),(608,867),(609,867),(607,868),(608,868),(609,868),(607,869),(607,870),(607,871),(608,871),(609,871),(607,872),(608,872),(609,872),(607,873),(607,874),(607,875),(608,875),(609,875),(607,876),(608,876),(609,876),(607,877),(608,877),(609,877),(608,878),(608,879),(609,879),(609,880),(610,881),(612,881),(610,882),(612,882),(610,883),(610,884),(612,884),(610,885),(612,885),(619,885),(610,886),(612,886),(610,887),(610,888),(612,888),(610,889),(610,890),(612,890),(610,891),(610,892),(612,892),(610,893),(612,893),(610,894),(612,894),(610,895),(612,895),(610,896),(612,896),(610,897),(612,897),(610,898),(615,898),(618,898),(620,898),(610,899),(610,900),(612,900),(610,901),(612,901),(610,902),(612,902),(619,902),(610,903),(610,904),(612,904),(610,905),(619,905),(610,906),(612,906),(610,907),(611,907),(612,907),(613,907),(615,907),(618,907),(620,907),(610,908),(612,908),(610,909),(612,909),(610,910),(612,910),(610,911),(610,912),(612,912),(612,913),(612,914),(615,915),(615,916),(615,917),(615,918),(617,918),(615,919),(617,919),(615,920),(617,920),(671,920),(690,920),(615,921),(615,922),(696,922),(615,923),(615,924),(617,925),(617,926),(617,927),(621,928),(622,928),(623,928),(624,928),(621,929),(622,929),(621,930),(622,930),(625,931),(628,931),(629,931),(690,931),(626,932),(626,933),(629,934),(647,934),(648,934),(667,934),(684,934),(629,935),(630,936),(630,937),(630,938),(630,939),(632,940),(634,940),(632,941),(633,941),(633,942),(635,942),(641,942),(634,943),(635,943),(636,944),(637,945),(694,945),(637,946),(637,947),(640,948),(641,949),(658,949),(659,949),(641,950),(661,950),(641,951),(662,951),(641,952),(666,952),(641,953),(679,953),(690,953),(641,954),(641,955),(660,955),(641,956),(674,956),(641,957),(658,957),(659,957),(641,958),(642,958),(643,958),(644,958),(645,958),(646,958),(647,958),(648,958),(649,958),(650,958),(651,958),(652,958),(653,958),(654,958),(656,958),(658,958),(659,958),(660,958),(661,958),(662,958),(663,958),(664,958),(665,958),(666,958),(667,958),(668,958),(669,958),(670,958),(671,958),(672,958),(673,958),(674,958),(675,958),(676,958),(677,958),(678,958),(679,958),(680,958),(681,958),(682,958),(683,958),(684,958),(685,958),(686,958),(687,958),(641,959),(660,959),(665,959),(668,959),(673,959),(680,959),(681,959),(682,959),(683,959),(690,959),(641,960),(685,960),(641,961),(686,961),(641,962),(687,962),(644,963),(663,963),(677,963),(661,964),(664,965),(672,965),(670,966),(675,967),(676,968),(677,969),(678,970),(689,971),(692,971),(690,972),(690,973),(690,974),(690,975),(690,976),(690,977),(690,978),(691,979),(692,980),(695,981),(697,982),(698,982),(699,982),(697,983),(698,983),(699,983),(697,984),(698,984),(699,984),(697,985),(698,985),(699,985);

--
-- Table structure for table `help_topic`
--

CREATE TABLE `help_topic` (
  `help_topic_id` int unsigned NOT NULL,
  `name` char(64) NOT NULL,
  `help_category_id` smallint unsigned NOT NULL,
  `description` text NOT NULL,
  `example` text NOT NULL,
  `url` text NOT NULL,
  PRIMARY KEY (`help_topic_id`),
  UNIQUE KEY `name` (`name`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='help topics';

--
-- Dumping data for table `help_topic`
--

INSERT INTO `help_topic` VALUES (0,'HELP_DATE',1,'This help information was generated from the MySQL 8.0 Reference Manual\non: 2023-08-31\n','',''),(1,'HELP_VERSION',1,'This help information was generated from the MySQL 8.0 Reference Manual\non: 2023-08-31 (revision: 76567)\n\nThis information applies to MySQL 8.0 through 8.0.34.\n','',''),(2,'AUTO_INCREMENT',2,'The AUTO_INCREMENT attribute can be used to generate a unique identity\nfor new rows:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html\n\n','CREATE TABLE animals (\n     id MEDIUMINT NOT NULL AUTO_INCREMENT,\n     name CHAR(30) NOT NULL,\n     PRIMARY KEY (id)\n);\n\nINSERT INTO animals (name) VALUES\n    (\'dog\'),(\'cat\'),(\'penguin\'),\n    (\'lax\'),(\'whale\'),(\'ostrich\');\n\nSELECT * FROM animals;\n','https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html'),(3,'HELP COMMAND',3,'Syntax:\nmysql> help search_string\n\nIf you provide an argument to the help command, mysql uses it as a\nsearch string to access server-side help from the contents of the MySQL\nReference Manual. The proper operation of this command requires that\nthe help tables in the mysql database be initialized with help topic\ninformation (see\nhttps://dev.mysql.com/doc/refman/8.0/en/server-side-help-support.html).\n\nIf there is no match for the search string, the search fails:\n\nmysql> help me\n\nNothing found\nPlease try to run \'help contents\' for a list of all accessible topics\n\nUse help contents to see a list of the help categories:\n\nmysql> help contents\nYou asked for help about help category: \"Contents\"\nFor more information, type \'help <item>\', where <item> is one of the\nfollowing categories:\n   Account Management\n   Administration\n   Data Definition\n   Data Manipulation\n   Data Types\n   Functions\n   Functions and Modifiers for Use with GROUP BY\n   Geographic Features\n   Language Structure\n   Plugins\n   Storage Engines\n   Stored Routines\n   Table Maintenance\n   Transactions\n   Triggers\n\nIf the search string matches multiple items, mysql shows a list of\nmatching topics:\n\nmysql> help logs\nMany help items for your request exist.\nTo make a more specific request, please type \'help <item>\',\nwhere <item> is one of the following topics:\n   SHOW\n   SHOW BINARY LOGS\n   SHOW ENGINE\n   SHOW LOGS\n\nUse a topic as the search string to see the help entry for that topic:\n\nmysql> help show binary logs\nName: \'SHOW BINARY LOGS\'\nDescription:\nSyntax:\nSHOW BINARY LOGS\nSHOW MASTER LOGS\n\nLists the binary log files on the server. This statement is used as\npart of the procedure described in [purge-binary-logs], that shows how\nto determine which logs can be purged.\n\nmysql> SHOW BINARY LOGS;\n+---------------+-----------+-----------+\n| Log_name      | File_size | Encrypted |\n+---------------+-----------+-----------+\n| binlog.000015 |    724935 | Yes       |\n| binlog.000016 |    733481 | Yes       |\n+---------------+-----------+-----------+\n\nThe search string can contain the wildcard characters % and _. These\nhave the same meaning as for pattern-matching operations performed with\nthe LIKE operator. For example, HELP rep% returns a list of topics that\nbegin with rep:\n\nmysql> HELP rep%\nMany help items for your request exist.\nTo make a more specific request, please type \'help <item>\',\nwhere <item> is one of the following\ntopics:\n   REPAIR TABLE\n   REPEAT FUNCTION\n   REPEAT LOOP\n   REPLACE\n   REPLACE FUNCTION\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mysql-server-side-help.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/mysql-server-side-help.html'),(4,'ASYMMETRIC_DECRYPT',5,'Syntax:\nasymmetric_decrypt(algorithm, data_str, priv_key_str)\n\nDecrypts an encrypted string using the given algorithm and key string,\nand returns the resulting plaintext as a binary string. If decryption\nfails, the result is NULL.\n\nFor the legacy version of this function in use before MySQL 8.0.29, see\nhttps://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions\n-legacy.html.\n\nBy default, the component_enterprise_encryption function assumes that\nencrypted text uses the RSAES-OAEP padding scheme. The function\nsupports decryption for content encrypted by the legacy openssl_udf\nshared library functions if the system variable\nenterprise_encryption.rsa_support_legacy_padding is set to ON (the\ndefault is OFF). When ON is set, the function also supports the\nRSAES-PKCS1-v1_5 padding scheme, as used by the legacy openssl_udf\nshared library functions. When OFF is set, content encrypted by the\nlegacy functions cannot be decrypted, and the function returns null\noutput for such content.\n\nalgorithm is the encryption algorithm used to create the key. The\nsupported algorithm value is \'RSA\'.\n\ndata_str is the encrypted string to decrypt, which was encrypted with\nasymmetric_encrypt().\n\npriv_key_str is a valid PEM encoded RSA private key. For successful\ndecryption, the key string must correspond to the public key string\nused with asymmetric_encrypt() to produce the encrypted string. The\nasymmetric_encrypt() component function only supports encryption using\na public key, so decryption takes place with the corresponding private\nkey.\n\nFor a usage example, see the description of asymmetric_encrypt().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html'),(5,'ASYMMETRIC_ENCRYPT',5,'Syntax:\nasymmetric_encrypt(algorithm, data_str, pub_key_str)\n\nEncrypts a string using the given algorithm and key string, and returns\nthe resulting ciphertext as a binary string. If encryption fails, the\nresult is NULL.\n\nFor the legacy version of this function in use before MySQL 8.0.29, see\nhttps://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions\n-legacy.html.\n\nalgorithm is the encryption algorithm used to create the key. The\nsupported algorithm value is \'RSA\'.\n\ndata_str is the string to encrypt. The length of this string cannot be\ngreater than the key string length in bytes, minus 42 (to account for\nthe padding).\n\npub_key_str is a valid PEM encoded RSA public key. The\nasymmetric_encrypt() component function only supports encryption using\na public key.\n\nTo recover the original unencrypted string, pass the encrypted string\nto asymmetric_decrypt(), along with the other part of the key pair used\nfor encryption, as in the following example:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html\n\n','-- Generate private/public key pair\nSET @priv = create_asymmetric_priv_key(\'RSA\', 2048);\nSET @pub = create_asymmetric_pub_key(\'RSA\', @priv);\n\n-- Encrypt using public key, decrypt using private key\nSET @ciphertext = asymmetric_encrypt(\'RSA\', \'The quick brown fox\', @pub);\nSET @plaintext = asymmetric_decrypt(\'RSA\', @ciphertext, @priv);\n','https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html'),(6,'ASYMMETRIC_SIGN',5,'Syntax:\nasymmetric_sign(algorithm, text, priv_key_str, digest_type)\n\nSigns a digest string or data string using a private key, and returns\nthe signature as a binary string. If signing fails, the result is NULL.\n\nFor the legacy version of this function in use before MySQL 8.0.29, see\nhttps://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions\n-legacy.html.\n\nalgorithm is the encryption algorithm used to create the key. The\nsupported algorithm value is \'RSA\'.\n\ntext is a data string or digest string. The function accepts digests\nbut does not require them, as it is also capable of handling data\nstrings of an arbitrary length. A digest string can be generated by\ncalling create_digest().\n\npriv_key_str is the private key string to use for signing the digest\nstring. It must be a valid PEM encoded RSA private key.\n\ndigest_type is the algorithm to be used to sign the data. The supported\ndigest_type values are \'SHA224\', \'SHA256\', \'SHA384\', and \'SHA512\' when\nOpenSSL 1.0.1 is in use. If OpenSSL 1.1.1 is in use, the additional\ndigest_type values \'SHA3-224\', \'SHA3-256\', \'SHA3-384\', and \'SHA3-512\'\nare available.\n\nFor a usage example, see the description of asymmetric_verify().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html'),(7,'ASYMMETRIC_VERIFY',5,'Syntax:\nasymmetric_verify(algorithm, text, sig_str, pub_key_str, digest_type)\n\nVerifies whether the signature string matches the digest string, and\nreturns 1 or 0 to indicate whether verification succeeded or failed. If\nverification fails, the result is NULL.\n\nFor the legacy version of this function in use before MySQL 8.0.29, see\nhttps://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions\n-legacy.html.\n\nBy default, the component_enterprise_encryption function assumes that\nsignatures use the RSASSA-PSS signature scheme. The function supports\nverification for signatures produced by the legacy openssl_udf shared\nlibrary functions if the system variable\nenterprise_encryption.rsa_support_legacy_padding is set to ON (the\ndefault is OFF). When ON is set, the function also supports the\nRSASSA-PKCS1-v1_5 signature scheme, as used by the legacy openssl_udf\nshared library functions. When OFF is set, signatures produced by the\nlegacy functions cannot be verified, and the function returns null\noutput for such content.\n\nalgorithm is the encryption algorithm used to create the key. The\nsupported algorithm value is \'RSA\'.\n\ntext is a data string or digest string. The component function accepts\ndigests but does not require them, as it is also capable of handling\ndata strings of an arbitrary length. A digest string can be generated\nby calling create_digest().\n\nsig_str is the signature string to be verified. A signature string can\nbe generated by calling asymmetric_sign().\n\npub_key_str is the public key string of the signer. It corresponds to\nthe private key passed to asymmetric_sign() to generate the signature\nstring. It must be a valid PEM encoded RSA public key.\n\ndigest_type is the algorithm that was used to sign the data. The\nsupported digest_type values are \'SHA224\', \'SHA256\', \'SHA384\', and\n\'SHA512\' when OpenSSL 1.0.1 is in use. If OpenSSL 1.1.1 is in use, the\nadditional digest_type values \'SHA3-224\', \'SHA3-256\', \'SHA3-384\', and\n\'SHA3-512\' are available.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html\n\n','-- Set the encryption algorithm and digest type\nSET @algo = \'RSA\';\nSET @dig_type = \'SHA512\';\n\n-- Create private/public key pair\nSET @priv = create_asymmetric_priv_key(@algo, 2048);\nSET @pub = create_asymmetric_pub_key(@algo, @priv);\n\n-- Generate digest from string\nSET @dig = create_digest(@dig_type, \'The quick brown fox\');\n\n-- Generate signature for digest and verify signature against digest\nSET @sig = asymmetric_sign(@algo, @dig, @priv, @dig_type);\nSET @verf = asymmetric_verify(@algo, @dig, @sig, @pub, @dig_type);\n','https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html'),(8,'CREATE_ASYMMETRIC_PRIV_KEY',5,'Syntax:\ncreate_asymmetric_priv_key(algorithm, key_length)\n\nCreates a private key using the given algorithm and key length, and\nreturns the key as a binary string in PEM format. The key is in PKCS #8\nformat. If key generation fails, the result is NULL.\n\nFor the legacy version of this function in use before MySQL 8.0.29, see\nhttps://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions\n-legacy.html.\n\nalgorithm is the encryption algorithm used to create the key. The\nsupported algorithm value is \'RSA\'.\n\nkey_length is the key length in bits. If you exceed the maximum allowed\nkey length or specify less than the minimum, key generation fails and\nthe result is null output. The minimum allowed key length in bits is\n2048. The maximum allowed key length is the value of the\nenterprise_encryption.maximum_rsa_key_size system variable, which\ndefaults to 4096. It has a maximum setting of 16384, which is the\nmaximum key length allowed for the RSA algorithm. See\nhttps://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-configuri\nng.html.\n\n*Note*:\n\nGenerating longer keys can consume significant CPU resources. Limiting\nthe key length using the enterprise_encryption.maximum_rsa_key_size\nsystem variable lets you provide adequate security for your\nrequirements while balancing this with resource usage.\n\nThis example creates a 2048-bit RSA private key, then derives a public\nkey from the private key:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html\n\n','SET @priv = create_asymmetric_priv_key(\'RSA\', 2048);\nSET @pub = create_asymmetric_pub_key(\'RSA\', @priv);\n','https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html'),(9,'CREATE_ASYMMETRIC_PUB_KEY',5,'Syntax:\ncreate_asymmetric_pub_key(algorithm, priv_key_str)\n\nDerives a public key from the given private key using the given\nalgorithm, and returns the key as a binary string in PEM format. The\nkey is in PKCS #8 format. If key derivation fails, the result is NULL.\n\nFor the legacy version of this function in use before MySQL 8.0.29, see\nhttps://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions\n-legacy.html.\n\nalgorithm is the encryption algorithm used to create the key. The\nsupported algorithm value is \'RSA\'.\n\npriv_key_str is a valid PEM encoded RSA private key.\n\nFor a usage example, see the description of\ncreate_asymmetric_priv_key().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html'),(10,'CREATE_DIGEST',5,'Syntax:\ncreate_digest(digest_type, str)\n\nCreates a digest from the given string using the given digest type, and\nreturns the digest as a binary string. If digest generation fails, the\nresult is NULL.\n\nFor the legacy version of this function in use before MySQL 8.0.29, see\nhttps://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions\n-legacy.html.\n\nThe resulting digest string is suitable for use with asymmetric_sign()\nand asymmetric_verify(). The component versions of these functions\naccept digests but do not require them, as they are capable of handling\ndata of an arbitrary length.\n\ndigest_type is the digest algorithm to be used to generate the digest\nstring. The supported digest_type values are \'SHA224\', \'SHA256\',\n\'SHA384\', and \'SHA512\' when OpenSSL 1.0.1 is in use. If OpenSSL 1.1.1\nis in use, the additional digest_type values \'SHA3-224\', \'SHA3-256\',\n\'SHA3-384\', and \'SHA3-512\' are available.\n\nstr is the non-null data string for which the digest is to be\ngenerated.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html\n\n','SET @dig = create_digest(\'SHA512\', \'The quick brown fox\');\n','https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions.html'),(11,'ASYMMETRIC_DERIVE',5,'Syntax:\nasymmetric_derive(pub_key_str, priv_key_str)\n\nDerives a symmetric key using the private key of one party and the\npublic key of another, and returns the resulting key as a binary\nstring. If key derivation fails, the result is NULL.\n\npub_key_str and priv_key_str are valid PEM encoded key strings that\nwere created using the DH algorithm.\n\nSuppose that you have two pairs of public and private keys:\n\nSET @dhp = create_dh_parameters(1024);\nSET @priv1 = create_asymmetric_priv_key(\'DH\', @dhp);\nSET @pub1 = create_asymmetric_pub_key(\'DH\', @priv1);\nSET @priv2 = create_asymmetric_priv_key(\'DH\', @dhp);\nSET @pub2 = create_asymmetric_pub_key(\'DH\', @priv2);\n\nSuppose further that you use the private key from one pair and the\npublic key from the other pair to create a symmetric key string. Then\nthis symmetric key identity relationship holds:\n\nasymmetric_derive(@pub1, @priv2) = asymmetric_derive(@pub2, @priv1)\n\nThis example requires DH private/public keys as inputs, created using a\nshared symmetric secret. Create the secret by passing the key length to\ncreate_dh_parameters(), then pass the secret as the \"key length\" to\ncreate_asymmetric_priv_key().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions-legacy.html\n\n','-- Generate DH shared symmetric secret\nSET @dhp = create_dh_parameters(1024);\n-- Generate DH key pairs\nSET @algo = \'DH\';\nSET @priv1 = create_asymmetric_priv_key(@algo, @dhp);\nSET @pub1 = create_asymmetric_pub_key(@algo, @priv1);\nSET @priv2 = create_asymmetric_priv_key(@algo, @dhp);\nSET @pub2 = create_asymmetric_pub_key(@algo, @priv2);\n\n-- Generate symmetric key using public key of first party,\n-- private key of second party\nSET @sym1 = asymmetric_derive(@pub1, @priv2);\n\n-- Or use public key of second party, private key of first party\nSET @sym2 = asymmetric_derive(@pub2, @priv1);\n','https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions-legacy.html'),(12,'CREATE_DH_PARAMETERS',5,'create_dh_parameters(key_len)\n\nCreates a shared secret for generating a DH private/public key pair and\nreturns a binary string that can be passed to\ncreate_asymmetric_priv_key(). If secret generation fails, the result is\nNULL.\n\nkey_len is the key length. The minimum and maximum key lengths in bits\nare 1,024 and 10,000. These key-length limits are constraints imposed\nby OpenSSL. Server administrators can impose additional limits on\nmaximum key length by setting the MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD,\nMYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD, and\nMYSQL_OPENSSL_UDF_DH_BITS_THRESHOLD environment variables. See\nhttps://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-configuri\nng.html.\n\nFor an example showing how to use the return value for generating\nsymmetric keys, see the description of asymmetric_derive().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions-legacy.html\n\n','SET @dhp = create_dh_parameters(1024);\n','https://dev.mysql.com/doc/refman/8.0/en/enterprise-encryption-functions-legacy.html'),(13,'TRUE',6,'The constants TRUE and FALSE evaluate to 1 and 0, respectively. The\nconstant names can be written in any lettercase.\n\nmysql> SELECT TRUE, true, FALSE, false;\n        -> 1, 1, 0, 0\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/boolean-literals.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/boolean-literals.html'),(14,'FALSE',6,'The constants TRUE and FALSE evaluate to 1 and 0, respectively. The\nconstant names can be written in any lettercase.\n\nmysql> SELECT TRUE, true, FALSE, false;\n        -> 1, 1, 0, 0\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/boolean-literals.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/boolean-literals.html'),(15,'BIT',2,'BIT[(M)]\n\nA bit-value type. M indicates the number of bits per value, from 1 to\n64. The default is 1 if M is omitted.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(16,'TINYINT',2,'TINYINT[(M)] [UNSIGNED] [ZEROFILL]\n\nA very small integer. The signed range is -128 to 127. The unsigned\nrange is 0 to 255.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(17,'BOOLEAN',2,'BOOL, BOOLEAN\n\nThese types are synonyms for TINYINT(1). A value of zero is considered\nfalse. Nonzero values are considered true:\n\nmysql> SELECT IF(0, \'true\', \'false\');\n+------------------------+\n| IF(0, \'true\', \'false\') |\n+------------------------+\n| false                  |\n+------------------------+\n\nmysql> SELECT IF(1, \'true\', \'false\');\n+------------------------+\n| IF(1, \'true\', \'false\') |\n+------------------------+\n| true                   |\n+------------------------+\n\nmysql> SELECT IF(2, \'true\', \'false\');\n+------------------------+\n| IF(2, \'true\', \'false\') |\n+------------------------+\n| true                   |\n+------------------------+\n\nHowever, the values TRUE and FALSE are merely aliases for 1 and 0,\nrespectively, as shown here:\n\nmysql> SELECT IF(0 = FALSE, \'true\', \'false\');\n+--------------------------------+\n| IF(0 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| true                           |\n+--------------------------------+\n\nmysql> SELECT IF(1 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(1 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| true                          |\n+-------------------------------+\n\nmysql> SELECT IF(2 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(2 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| false                         |\n+-------------------------------+\n\nmysql> SELECT IF(2 = FALSE, \'true\', \'false\');\n+--------------------------------+\n| IF(2 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| false                          |\n+--------------------------------+\n\nThe last two statements display the results shown because 2 is equal to\nneither 1 nor 0.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(18,'SMALLINT',2,'SMALLINT[(M)] [UNSIGNED] [ZEROFILL]\n\nA small integer. The signed range is -32768 to 32767. The unsigned\nrange is 0 to 65535.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(19,'MEDIUMINT',2,'MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]\n\nA medium-sized integer. The signed range is -8388608 to 8388607. The\nunsigned range is 0 to 16777215.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(20,'INT',2,'INT[(M)] [UNSIGNED] [ZEROFILL]\n\nA normal-size integer. The signed range is -2147483648 to 2147483647.\nThe unsigned range is 0 to 4294967295.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(21,'INTEGER',2,'INTEGER[(M)] [UNSIGNED] [ZEROFILL]\n\nThis type is a synonym for INT.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(22,'BIGINT',2,'BIGINT[(M)] [UNSIGNED] [ZEROFILL]\n\nA large integer. The signed range is -9223372036854775808 to\n9223372036854775807. The unsigned range is 0 to 18446744073709551615.\n\nSERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(23,'DECIMAL',2,'DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]\n\nA packed \"exact\" fixed-point number. M is the total number of digits\n(the precision) and D is the number of digits after the decimal point\n(the scale). The decimal point and (for negative numbers) the - sign\nare not counted in M. If D is 0, values have no decimal point or\nfractional part. The maximum number of digits (M) for DECIMAL is 65.\nThe maximum number of supported decimals (D) is 30. If D is omitted,\nthe default is 0. If M is omitted, the default is 10. (There is also a\nlimit on how long the text of DECIMAL literals can be; see\nhttps://dev.mysql.com/doc/refman/8.0/en/precision-math-expressions.html\n.)\n\nUNSIGNED, if specified, disallows negative values. As of MySQL 8.0.17,\nthe UNSIGNED attribute is deprecated for columns of type DECIMAL (and\nany synonyms); you should expect support for it to be removed in a\nfuture version of MySQL. Consider using a simple CHECK constraint\ninstead for such columns.\n\nAll basic calculations (+, -, *, /) with DECIMAL columns are done with\na precision of 65 digits.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(24,'DEC',2,'DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED]\n[ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]\n\nThese types are synonyms for DECIMAL. The FIXED synonym is available\nfor compatibility with other database systems.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(25,'FLOAT',2,'FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]\n\nA small (single-precision) floating-point number. Permissible values\nare -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to\n3.402823466E+38. These are the theoretical limits, based on the IEEE\nstandard. The actual range might be slightly smaller depending on your\nhardware or operating system.\n\nM is the total number of digits and D is the number of digits following\nthe decimal point. If M and D are omitted, values are stored to the\nlimits permitted by the hardware. A single-precision floating-point\nnumber is accurate to approximately 7 decimal places.\n\nFLOAT(M,D) is a nonstandard MySQL extension. As of MySQL 8.0.17, this\nsyntax is deprecated, and you should expect support for it to be\nremoved in a future version of MySQL.\n\nUNSIGNED, if specified, disallows negative values. As of MySQL 8.0.17,\nthe UNSIGNED attribute is deprecated for columns of type FLOAT (and any\nsynonyms) and you should expect support for it to be removed in a\nfuture version of MySQL. Consider using a simple CHECK constraint\ninstead for such columns.\n\nUsing FLOAT might give you some unexpected problems because all\ncalculations in MySQL are done with double precision. See\nhttps://dev.mysql.com/doc/refman/8.0/en/no-matching-rows.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(26,'DOUBLE',2,'DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]\n\nA normal-size (double-precision) floating-point number. Permissible\nvalues are -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and\n2.2250738585072014E-308 to 1.7976931348623157E+308. These are the\ntheoretical limits, based on the IEEE standard. The actual range might\nbe slightly smaller depending on your hardware or operating system.\n\nM is the total number of digits and D is the number of digits following\nthe decimal point. If M and D are omitted, values are stored to the\nlimits permitted by the hardware. A double-precision floating-point\nnumber is accurate to approximately 15 decimal places.\n\nDOUBLE(M,D) is a nonstandard MySQL extension. As of MySQL 8.0.17, this\nsyntax is deprecated and you should expect support for it to be removed\nin a future version of MySQL.\n\nUNSIGNED, if specified, disallows negative values. As of MySQL 8.0.17,\nthe UNSIGNED attribute is deprecated for columns of type DOUBLE (and\nany synonyms) and you should expect support for it to be removed in a\nfuture version of MySQL. Consider using a simple CHECK constraint\ninstead for such columns.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(27,'DOUBLE PRECISION',2,'DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED]\n[ZEROFILL]\n\nThese types are synonyms for DOUBLE. Exception: If the REAL_AS_FLOAT\nSQL mode is enabled, REAL is a synonym for FLOAT rather than DOUBLE.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html'),(28,'DATE',2,'DATE\n\nA date. The supported range is \'1000-01-01\' to \'9999-12-31\'. MySQL\ndisplays DATE values in \'YYYY-MM-DD\' format, but permits assignment of\nvalues to DATE columns using either strings or numbers.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html'),(29,'DATETIME',2,'DATETIME[(fsp)]\n\nA date and time combination. The supported range is \'1000-01-01\n00:00:00.000000\' to \'9999-12-31 23:59:59.499999\'. MySQL displays\nDATETIME values in \'YYYY-MM-DD hh:mm:ss[.fraction]\' format, but permits\nassignment of values to DATETIME columns using either strings or\nnumbers.\n\nAn optional fsp value in the range from 0 to 6 may be given to specify\nfractional seconds precision. A value of 0 signifies that there is no\nfractional part. If omitted, the default precision is 0.\n\nAutomatic initialization and updating to the current date and time for\nDATETIME columns can be specified using DEFAULT and ON UPDATE column\ndefinition clauses, as described in\nhttps://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html'),(30,'TIMESTAMP',2,'TIMESTAMP[(fsp)]\n\nA timestamp. The range is \'1970-01-01 00:00:01.000000\' UTC to\n\'2038-01-19 03:14:07.499999\' UTC. TIMESTAMP values are stored as the\nnumber of seconds since the epoch (\'1970-01-01 00:00:00\' UTC). A\nTIMESTAMP cannot represent the value \'1970-01-01 00:00:00\' because that\nis equivalent to 0 seconds from the epoch and the value 0 is reserved\nfor representing \'0000-00-00 00:00:00\', the \"zero\" TIMESTAMP value.\n\nAn optional fsp value in the range from 0 to 6 may be given to specify\nfractional seconds precision. A value of 0 signifies that there is no\nfractional part. If omitted, the default precision is 0.\n\nThe way the server handles TIMESTAMP definitions depends on the value\nof the explicit_defaults_for_timestamp system variable (see\nhttps://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html).\n\nIf explicit_defaults_for_timestamp is enabled, there is no automatic\nassignment of the DEFAULT CURRENT_TIMESTAMP or ON UPDATE\nCURRENT_TIMESTAMP attributes to any TIMESTAMP column. They must be\nincluded explicitly in the column definition. Also, any TIMESTAMP not\nexplicitly declared as NOT NULL permits NULL values.\n\nIf explicit_defaults_for_timestamp is disabled, the server handles\nTIMESTAMP as follows:\n\nUnless specified otherwise, the first TIMESTAMP column in a table is\ndefined to be automatically set to the date and time of the most recent\nmodification if not explicitly assigned a value. This makes TIMESTAMP\nuseful for recording the timestamp of an INSERT or UPDATE operation.\nYou can also set any TIMESTAMP column to the current date and time by\nassigning it a NULL value, unless it has been defined with the NULL\nattribute to permit NULL values.\n\nAutomatic initialization and updating to the current date and time can\nbe specified using DEFAULT CURRENT_TIMESTAMP and ON UPDATE\nCURRENT_TIMESTAMP column definition clauses. By default, the first\nTIMESTAMP column has these properties, as previously noted. However,\nany TIMESTAMP column in a table can be defined to have these\nproperties.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html'),(31,'TIME',2,'TIME[(fsp)]\n\nA time. The range is \'-838:59:59.000000\' to \'838:59:59.000000\'. MySQL\ndisplays TIME values in \'hh:mm:ss[.fraction]\' format, but permits\nassignment of values to TIME columns using either strings or numbers.\n\nAn optional fsp value in the range from 0 to 6 may be given to specify\nfractional seconds precision. A value of 0 signifies that there is no\nfractional part. If omitted, the default precision is 0.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html'),(32,'YEAR DATA TYPE',2,'YEAR[(4)]\n\nA year in 4-digit format. MySQL displays YEAR values in YYYY format,\nbut permits assignment of values to YEAR columns using either strings\nor numbers. Values display as 1901 to 2155, or 0000.\n\nFor additional information about YEAR display format and interpretation\nof input values, see https://dev.mysql.com/doc/refman/8.0/en/year.html.\n\n*Note*:\n\nAs of MySQL 8.0.19, the YEAR(4) data type with an explicit display\nwidth is deprecated; you should expect support for it to be removed in\na future version of MySQL. Instead, use YEAR without a display width,\nwhich has the same meaning.\n\nMySQL 8.0 does not support the 2-digit YEAR(2) data type permitted in\nolder versions of MySQL. For instructions on converting to 4-digit\nYEAR, see 2-Digit YEAR(2) Limitations and Migrating to 4-Digit YEAR\n(https://dev.mysql.com/doc/refman/5.7/en/migrating-from-year2.html), in\nMySQL 5.7 Reference Manual (https://dev.mysql.com/doc/refman/5.7/en/).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-syntax.html'),(33,'CHAR',2,'[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nA fixed-length string that is always right-padded with spaces to the\nspecified length when stored. M represents the column length in\ncharacters. The range of M is 0 to 255. If M is omitted, the length is\n1.\n\n*Note*:\n\nTrailing spaces are removed when CHAR values are retrieved unless the\nPAD_CHAR_TO_FULL_LENGTH SQL mode is enabled.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(34,'CHAR BYTE',2,'The CHAR BYTE data type is an alias for the BINARY data type. This is a\ncompatibility feature.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(35,'VARCHAR',2,'[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nA variable-length string. M represents the maximum column length in\ncharacters. The range of M is 0 to 65,535. The effective maximum length\nof a VARCHAR is subject to the maximum row size (65,535 bytes, which is\nshared among all columns) and the character set used. For example,\nutf8mb3 characters can require up to three bytes per character, so a\nVARCHAR column that uses the utf8mb3 character set can be declared to\nbe a maximum of 21,844 characters. See\nhttps://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html.\n\nMySQL stores VARCHAR values as a 1-byte or 2-byte length prefix plus\ndata. The length prefix indicates the number of bytes in the value. A\nVARCHAR column uses one length byte if values require no more than 255\nbytes, two length bytes if values may require more than 255 bytes.\n\n*Note*:\n\nMySQL follows the standard SQL specification, and does not remove\ntrailing spaces from VARCHAR values.\n\nVARCHAR is shorthand for CHARACTER VARYING. NATIONAL VARCHAR is the\nstandard SQL way to define that a VARCHAR column should use some\npredefined character set. MySQL uses utf8mb3 as this predefined\ncharacter set.\nhttps://dev.mysql.com/doc/refman/8.0/en/charset-national.html. NVARCHAR\nis shorthand for NATIONAL VARCHAR.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(36,'BINARY',2,'BINARY[(M)]\n\nThe BINARY type is similar to the CHAR type, but stores binary byte\nstrings rather than nonbinary character strings. An optional length M\nrepresents the column length in bytes. If omitted, M defaults to 1.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(37,'VARBINARY',2,'VARBINARY(M)\n\nThe VARBINARY type is similar to the VARCHAR type, but stores binary\nbyte strings rather than nonbinary character strings. M represents the\nmaximum column length in bytes.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(38,'TINYBLOB',2,'TINYBLOB\n\nA BLOB column with a maximum length of 255 (28 − 1) bytes. Each\nTINYBLOB value is stored using a 1-byte length prefix that indicates\nthe number of bytes in the value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(39,'TINYTEXT',2,'TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nA TEXT column with a maximum length of 255 (28 − 1) characters. The\neffective maximum length is less if the value contains multibyte\ncharacters. Each TINYTEXT value is stored using a 1-byte length prefix\nthat indicates the number of bytes in the value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(40,'BLOB',2,'BLOB[(M)]\n\nA BLOB column with a maximum length of 65,535 (216 − 1) bytes. Each\nBLOB value is stored using a 2-byte length prefix that indicates the\nnumber of bytes in the value.\n\nAn optional length M can be given for this type. If this is done, MySQL\ncreates the column as the smallest BLOB type large enough to hold\nvalues M bytes long.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(41,'TEXT',2,'TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]\n\nA TEXT column with a maximum length of 65,535 (216 − 1) characters.\nThe effective maximum length is less if the value contains multibyte\ncharacters. Each TEXT value is stored using a 2-byte length prefix that\nindicates the number of bytes in the value.\n\nAn optional length M can be given for this type. If this is done, MySQL\ncreates the column as the smallest TEXT type large enough to hold\nvalues M characters long.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(42,'MEDIUMBLOB',2,'MEDIUMBLOB\n\nA BLOB column with a maximum length of 16,777,215 (224 − 1) bytes.\nEach MEDIUMBLOB value is stored using a 3-byte length prefix that\nindicates the number of bytes in the value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(43,'MEDIUMTEXT',2,'MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nA TEXT column with a maximum length of 16,777,215 (224 − 1)\ncharacters. The effective maximum length is less if the value contains\nmultibyte characters. Each MEDIUMTEXT value is stored using a 3-byte\nlength prefix that indicates the number of bytes in the value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(44,'LONGBLOB',2,'LONGBLOB\n\nA BLOB column with a maximum length of 4,294,967,295 or 4GB (232 − 1)\nbytes. The effective maximum length of LONGBLOB columns depends on the\nconfigured maximum packet size in the client/server protocol and\navailable memory. Each LONGBLOB value is stored using a 4-byte length\nprefix that indicates the number of bytes in the value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(45,'LONGTEXT',2,'LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nA TEXT column with a maximum length of 4,294,967,295 or 4GB (232 − 1)\ncharacters. The effective maximum length is less if the value contains\nmultibyte characters. The effective maximum length of LONGTEXT columns\nalso depends on the configured maximum packet size in the client/server\nprotocol and available memory. Each LONGTEXT value is stored using a\n4-byte length prefix that indicates the number of bytes in the value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(46,'ENUM',2,'ENUM(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nAn enumeration. A string object that can have only one value, chosen\nfrom the list of values \'value1\', \'value2\', ..., NULL or the special \'\'\nerror value. ENUM values are represented internally as integers.\n\nAn ENUM column can have a maximum of 65,535 distinct elements.\n\nThe maximum supported length of an individual ENUM element is M <= 255\nand (M x w) <= 1020, where M is the element literal length and w is the\nnumber of bytes required for the maximum-length character in the\ncharacter set.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(47,'SET DATA TYPE',2,'SET(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nA set. A string object that can have zero or more values, each of which\nmust be chosen from the list of values \'value1\', \'value2\', ... SET\nvalues are represented internally as integers.\n\nA SET column can have a maximum of 64 distinct members.\n\nThe maximum supported length of an individual SET element is M <= 255\nand (M x w) <= 1020, where M is the element literal length and w is the\nnumber of bytes required for the maximum-length character in the\ncharacter set.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html'),(48,'BLOB DATA TYPE',2,'A BLOB is a binary large object that can hold a variable amount of\ndata. The four BLOB types are TINYBLOB, BLOB, MEDIUMBLOB, and LONGBLOB.\nThese differ only in the maximum length of the values they can hold.\nThe four TEXT types are TINYTEXT, TEXT, MEDIUMTEXT, and LONGTEXT. These\ncorrespond to the four BLOB types and have the same maximum lengths and\nstorage requirements. See\nhttps://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/blob.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/blob.html'),(49,'GEOMETRY HIERARCHY',7,'Geometry is the base class. It is an abstract class. The instantiable\nsubclasses of Geometry are restricted to zero-, one-, and\ntwo-dimensional geometric objects that exist in two-dimensional\ncoordinate space. All instantiable geometry classes are defined so that\nvalid instances of a geometry class are topologically closed (that is,\nall defined geometries include their boundary).\n\nThe base Geometry class has subclasses for Point, Curve, Surface, and\nGeometryCollection:\n\no Point represents zero-dimensional objects.\n\no Curve represents one-dimensional objects, and has subclass\n  LineString, with sub-subclasses Line and LinearRing.\n\no Surface is designed for two-dimensional objects and has subclass\n  Polygon.\n\no GeometryCollection has specialized zero-, one-, and two-dimensional\n  collection classes named MultiPoint, MultiLineString, and\n  MultiPolygon for modeling geometries corresponding to collections of\n  Points, LineStrings, and Polygons, respectively. MultiCurve and\n  MultiSurface are introduced as abstract superclasses that generalize\n  the collection interfaces to handle Curves and Surfaces.\n\nGeometry, Curve, Surface, MultiCurve, and MultiSurface are defined as\nnoninstantiable classes. They define a common set of methods for their\nsubclasses and are included for extensibility.\n\nPoint, LineString, Polygon, GeometryCollection, MultiPoint,\nMultiLineString, and MultiPolygon are instantiable classes.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-geometry-class-hierarchy.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-geometry-class-hierarchy.html'),(50,'MBR DEFINITION',8,'Its MBR (minimum bounding rectangle), or envelope. This is the bounding\ngeometry, formed by the minimum and maximum (X,Y) coordinates:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-class-geometry.html\n\n','((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))\n','https://dev.mysql.com/doc/refman/8.0/en/gis-class-geometry.html'),(51,'WKT DEFINITION',9,'The Well-Known Text (WKT) representation of geometry values is designed\nfor exchanging geometry data in ASCII form. The OpenGIS specification\nprovides a Backus-Naur grammar that specifies the formal production\nrules for writing WKT values (see\nhttps://dev.mysql.com/doc/refman/8.0/en/spatial-types.html).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-data-formats.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-data-formats.html'),(52,'SPATIAL COLUMNS',7,'MySQL provides a standard way of creating spatial columns for geometry\ntypes, for example, with CREATE TABLE or ALTER TABLE. Spatial columns\nare supported for MyISAM, InnoDB, NDB, and ARCHIVE tables. See also the\nnotes about spatial indexes under [HELP SPATIAL indexes].\n\nColumns with a spatial data type can have an SRID attribute, to\nexplicitly indicate the spatial reference system (SRS) for values\nstored in the column. For implications of an SRID-restricted column,\nsee https://dev.mysql.com/doc/refman/8.0/en/spatial-type-overview.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/creating-spatial-columns.html\n\n','CREATE TABLE geom (g GEOMETRY);\n','https://dev.mysql.com/doc/refman/8.0/en/creating-spatial-columns.html'),(53,'SPATIAL INDEXES',7,'For InnoDB and MyISAM tables, MySQL can create spatial indexes using\nsyntax similar to that for creating regular indexes, but using the\nSPATIAL keyword. Columns in spatial indexes must be declared NOT NULL.\nThe following examples demonstrate how to create spatial indexes:\n\no With CREATE TABLE:\n\nCREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326, SPATIAL INDEX(g));\n\no With ALTER TABLE:\n\nCREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326);\nALTER TABLE geom ADD SPATIAL INDEX(g);\n\no With CREATE INDEX:\n\nCREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326);\nCREATE SPATIAL INDEX g ON geom (g);\n\nSPATIAL INDEX creates an R-tree index. For storage engines that support\nnonspatial indexing of spatial columns, the engine creates a B-tree\nindex. A B-tree index on spatial values is useful for exact-value\nlookups, but not for range scans.\n\nThe optimizer can use spatial indexes defined on columns that are\nSRID-restricted. For more information, see\nhttps://dev.mysql.com/doc/refman/8.0/en/spatial-type-overview.html, and\nhttps://dev.mysql.com/doc/refman/8.0/en/spatial-index-optimization.html\n.\n\nFor more information on indexing spatial columns, see [HELP CREATE\nINDEX].\n\nTo drop spatial indexes, use ALTER TABLE or DROP INDEX:\n\no With ALTER TABLE:\n\nALTER TABLE geom DROP INDEX g;\n\no With DROP INDEX:\n\nDROP INDEX g ON geom;\n\nExample: Suppose that a table geom contains more than 32,000\ngeometries, which are stored in the column g of type GEOMETRY. The\ntable also has an AUTO_INCREMENT column fid for storing object ID\nvalues.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/creating-spatial-indexes.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/creating-spatial-indexes.html'),(54,'=',10,'=\n\nEqual:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 1 = 0;\n        -> 0\nmysql> SELECT \'0\' = 0;\n        -> 1\nmysql> SELECT \'0.0\' = 0;\n        -> 1\nmysql> SELECT \'0.01\' = 0;\n        -> 0\nmysql> SELECT \'.01\' = 0.01;\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(55,'<=>',10,'Syntax:\n<=>\n\nNULL-safe equal. This operator performs an equality comparison like the\n= operator, but returns 1 rather than NULL if both operands are NULL,\nand 0 rather than NULL if one operand is NULL.\n\nThe <=> operator is equivalent to the standard SQL IS NOT DISTINCT FROM\noperator.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;\n        -> 1, 1, 0\nmysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;\n        -> 1, NULL, NULL\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(56,'!=',10,'Syntax:\n<>, !=\n\nNot equal:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT \'.01\' <> \'0.01\';\n        -> 1\nmysql> SELECT .01 <> \'0.01\';\n        -> 0\nmysql> SELECT \'zapp\' <> \'zappp\';\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(57,'<=',10,'Syntax:\n<=\n\nLess than or equal:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 0.1 <= 2;\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(58,'<',10,'Syntax:\n<\n\nLess than:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 2 < 2;\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(59,'>=',10,'Syntax:\n>=\n\nGreater than or equal:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 2 >= 2;\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(60,'>',10,'Syntax:\n>\n\nGreater than:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 2 > 2;\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(61,'BETWEEN AND',10,'Syntax:\nexpr BETWEEN min AND max\n\nIf expr is greater than or equal to min and expr is less than or equal\nto max, BETWEEN returns 1, otherwise it returns 0. This is equivalent\nto the expression (min <= expr AND expr <= max) if all the arguments\nare of the same type. Otherwise type conversion takes place according\nto the rules described in\nhttps://dev.mysql.com/doc/refman/8.0/en/type-conversion.html, but\napplied to all the three arguments.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 2 BETWEEN 1 AND 3, 2 BETWEEN 3 and 1;\n        -> 1, 0\nmysql> SELECT 1 BETWEEN 2 AND 3;\n        -> 0\nmysql> SELECT \'b\' BETWEEN \'a\' AND \'c\';\n        -> 1\nmysql> SELECT 2 BETWEEN 2 AND \'3\';\n        -> 1\nmysql> SELECT 2 BETWEEN 2 AND \'x-3\';\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(62,'NOT BETWEEN',10,'Syntax:\nexpr NOT BETWEEN min AND max\n\nThis is the same as NOT (expr BETWEEN min AND max).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(63,'COALESCE',10,'Syntax:\nCOALESCE(value,...)\n\nReturns the first non-NULL value in the list, or NULL if there are no\nnon-NULL values.\n\nThe return type of COALESCE() is the aggregated type of the argument\ntypes.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT COALESCE(NULL,1);\n        -> 1\nmysql> SELECT COALESCE(NULL,NULL,NULL);\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(64,'GREATEST',10,'Syntax:\nGREATEST(value1,value2,...)\n\nWith two or more arguments, returns the largest (maximum-valued)\nargument. The arguments are compared using the same rules as for\nLEAST().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT GREATEST(2,0);\n        -> 2\nmysql> SELECT GREATEST(34.0,3.0,5.0,767.0);\n        -> 767.0\nmysql> SELECT GREATEST(\'B\',\'A\',\'C\');\n        -> \'C\'\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(65,'IN',10,'Syntax:\nexpr IN (value,...)\n\nReturns 1 (true) if expr is equal to any of the values in the IN()\nlist, else returns 0 (false).\n\nType conversion takes place according to the rules described in\nhttps://dev.mysql.com/doc/refman/8.0/en/type-conversion.html, applied\nto all the arguments. If no type conversion is needed for the values in\nthe IN() list, they are all non-JSON constants of the same type, and\nexpr can be compared to each of them as a value of the same type\n(possibly after type conversion), an optimization takes place. The\nvalues the list are sorted and the search for expr is done using a\nbinary search, which makes the IN() operation very quick.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 2 IN (0,3,5,7);\n        -> 0\nmysql> SELECT \'wefwf\' IN (\'wee\',\'wefwf\',\'weg\');\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(66,'NOT IN',10,'Syntax:\nexpr NOT IN (value,...)\n\nThis is the same as NOT (expr IN (value,...)).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(67,'INTERVAL',10,'Syntax:\nINTERVAL(N,N1,N2,N3,...)\n\nReturns 0 if N <= N1, 1 if N <= N2 and so on, or -1 if N is NULL. All\narguments are treated as integers. It is required that N1 <= N2 <= N3\n<= ... <= Nn for this function to work correctly. This is because a\nbinary search is used (very fast).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);\n        -> 3\nmysql> SELECT INTERVAL(10, 1, 10, 100, 1000);\n        -> 2\nmysql> SELECT INTERVAL(22, 23, 30, 44, 200);\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(68,'IS',10,'Syntax:\nIS boolean_value\n\nTests a value against a boolean value, where boolean_value can be TRUE,\nFALSE, or UNKNOWN.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;\n        -> 1, 1, 1\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(69,'IS NOT',10,'Syntax:\nIS NOT boolean_value\n\nTests a value against a boolean value, where boolean_value can be TRUE,\nFALSE, or UNKNOWN.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;\n        -> 1, 1, 0\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(70,'IS NULL',10,'Syntax:\nIS NULL\n\nTests whether a value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;\n        -> 0, 0, 1\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(71,'IS NOT NULL',10,'Syntax:\nIS NOT NULL\n\nTests whether a value is not NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;\n        -> 1, 1, 0\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(72,'ISNULL',10,'Syntax:\nISNULL(expr)\n\nIf expr is NULL, ISNULL() returns 1, otherwise it returns 0.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT ISNULL(1+1);\n        -> 0\nmysql> SELECT ISNULL(1/0);\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(73,'LEAST',10,'Syntax:\nLEAST(value1,value2,...)\n\nWith two or more arguments, returns the smallest (minimum-valued)\nargument. The arguments are compared using the following rules:\n\no If any argument is NULL, the result is NULL. No comparison is needed.\n\no If all arguments are integer-valued, they are compared as integers.\n\no If at least one argument is double precision, they are compared as\n  double-precision values. Otherwise, if at least one argument is a\n  DECIMAL value, they are compared as DECIMAL values.\n\no If the arguments comprise a mix of numbers and strings, they are\n  compared as strings.\n\no If any argument is a nonbinary (character) string, the arguments are\n  compared as nonbinary strings.\n\no In all other cases, the arguments are compared as binary strings.\n\nThe return type of LEAST() is the aggregated type of the comparison\nargument types.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html\n\n','mysql> SELECT LEAST(2,0);\n        -> 0\nmysql> SELECT LEAST(34.0,3.0,5.0,767.0);\n        -> 3.0\nmysql> SELECT LEAST(\'B\',\'A\',\'C\');\n        -> \'A\'\n','https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html'),(74,'!',11,'Syntax:\nNOT, !\n\nLogical NOT. Evaluates to 1 if the operand is 0, to 0 if the operand is\nnonzero, and NOT NULL returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html\n\n','mysql> SELECT NOT 10;\n        -> 0\nmysql> SELECT NOT 0;\n        -> 1\nmysql> SELECT NOT NULL;\n        -> NULL\nmysql> SELECT ! (1+1);\n        -> 0\nmysql> SELECT ! 1+1;\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html'),(75,'AND',11,'Syntax:\nAND, &&\n\nLogical AND. Evaluates to 1 if all operands are nonzero and not NULL,\nto 0 if one or more operands are 0, otherwise NULL is returned.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html\n\n','mysql> SELECT 1 AND 1;\n        -> 1\nmysql> SELECT 1 AND 0;\n        -> 0\nmysql> SELECT 1 AND NULL;\n        -> NULL\nmysql> SELECT 0 AND NULL;\n        -> 0\nmysql> SELECT NULL AND 0;\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html'),(76,'OR',11,'Syntax:\nOR, ||\n\nLogical OR. When both operands are non-NULL, the result is 1 if any\noperand is nonzero, and 0 otherwise. With a NULL operand, the result is\n1 if the other operand is nonzero, and NULL otherwise. If both operands\nare NULL, the result is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html\n\n','mysql> SELECT 1 OR 1;\n        -> 1\nmysql> SELECT 1 OR 0;\n        -> 1\nmysql> SELECT 0 OR 0;\n        -> 0\nmysql> SELECT 0 OR NULL;\n        -> NULL\nmysql> SELECT 1 OR NULL;\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html'),(77,'XOR',11,'Syntax:\nXOR\n\nLogical XOR. Returns NULL if either operand is NULL. For non-NULL\noperands, evaluates to 1 if an odd number of operands is nonzero,\notherwise 0 is returned.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html\n\n','mysql> SELECT 1 XOR 1;\n        -> 0\nmysql> SELECT 1 XOR 0;\n        -> 1\nmysql> SELECT 1 XOR NULL;\n        -> NULL\nmysql> SELECT 1 XOR 1 XOR 1;\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html'),(78,'ASSIGN-VALUE',11,'Syntax:\n:=\n\nAssignment operator. Causes the user variable on the left hand side of\nthe operator to take on the value to its right. The value on the right\nhand side may be a literal value, another variable storing a value, or\nany legal expression that yields a scalar value, including the result\nof a query (provided that this value is a scalar value). You can\nperform multiple assignments in the same SET statement. You can perform\nmultiple assignments in the same statement.\n\nUnlike =, the := operator is never interpreted as a comparison\noperator. This means you can use := in any valid SQL statement (not\njust in SET statements) to assign a value to a variable.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/assignment-operators.html\n\n','mysql> SELECT @var1, @var2;\n        -> NULL, NULL\nmysql> SELECT @var1 := 1, @var2;\n        -> 1, NULL\nmysql> SELECT @var1, @var2;\n        -> 1, NULL\nmysql> SELECT @var1, @var2 := @var1;\n        -> 1, 1\nmysql> SELECT @var1, @var2;\n        -> 1, 1\n\nmysql> SELECT @var1:=COUNT(*) FROM t1;\n        -> 4\nmysql> SELECT @var1;\n        -> 4\n','https://dev.mysql.com/doc/refman/8.0/en/assignment-operators.html'),(79,'ASSIGN-EQUAL',11,'Syntax:\n=\n\nThis operator is used to perform value assignments in two cases,\ndescribed in the next two paragraphs.\n\nWithin a SET statement, = is treated as an assignment operator that\ncauses the user variable on the left hand side of the operator to take\non the value to its right. (In other words, when used in a SET\nstatement, = is treated identically to :=.) The value on the right hand\nside may be a literal value, another variable storing a value, or any\nlegal expression that yields a scalar value, including the result of a\nquery (provided that this value is a scalar value). You can perform\nmultiple assignments in the same SET statement.\n\nIn the SET clause of an UPDATE statement, = also acts as an assignment\noperator; in this case, however, it causes the column named on the left\nhand side of the operator to assume the value given to the right,\nprovided any WHERE conditions that are part of the UPDATE are met. You\ncan make multiple assignments in the same SET clause of an UPDATE\nstatement.\n\nIn any other context, = is treated as a comparison operator.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/assignment-operators.html\n\n','mysql> SELECT @var1, @var2;\n        -> NULL, NULL\nmysql> SELECT @var1 := 1, @var2;\n        -> 1, NULL\nmysql> SELECT @var1, @var2;\n        -> 1, NULL\nmysql> SELECT @var1, @var2 := @var1;\n        -> 1, 1\nmysql> SELECT @var1, @var2;\n        -> 1, 1\n','https://dev.mysql.com/doc/refman/8.0/en/assignment-operators.html'),(80,'CASE OPERATOR',12,'Syntax:\nCASE value WHEN compare_value THEN result [WHEN compare_value THEN\nresult ...] [ELSE result] END\n\nCASE WHEN condition THEN result [WHEN condition THEN result ...] [ELSE\nresult] END\n\nThe first CASE syntax returns the result for the first\nvalue=compare_value comparison that is true. The second syntax returns\nthe result for the first condition that is true. If no comparison or\ncondition is true, the result after ELSE is returned, or NULL if there\nis no ELSE part.\n\n*Note*:\n\nThe syntax of the CASE operator described here differs slightly from\nthat of the SQL CASE statement described in [HELP CASE statement], for\nuse inside stored programs. The CASE statement cannot have an ELSE NULL\nclause, and it is terminated with END CASE instead of END.\n\nThe return type of a CASE expression result is the aggregated type of\nall result values:\n\no If all types are numeric, the aggregated type is also numeric:\n\n  o If at least one argument is double precision, the result is double\n    precision.\n\n  o Otherwise, if at least one argument is DECIMAL, the result is\n    DECIMAL.\n\n  o Otherwise, the result is an integer type (with one exception):\n\n    o If all integer types are all signed or all unsigned, the result\n      is the same sign and the precision is the highest of all\n      specified integer types (that is, TINYINT, SMALLINT, MEDIUMINT,\n      INT, or BIGINT).\n\n    o If there is a combination of signed and unsigned integer types,\n      the result is signed and the precision may be higher. For\n      example, if the types are signed INT and unsigned INT, the result\n      is signed BIGINT.\n\n    o The exception is unsigned BIGINT combined with any signed integer\n      type. The result is DECIMAL with sufficient precision and scale\n      0.\n\no If all types are BIT, the result is BIT. Otherwise, BIT arguments are\n  treated similar to BIGINT.\n\no If all types are YEAR, the result is YEAR. Otherwise, YEAR arguments\n  are treated similar to INT.\n\no If all types are character string (CHAR or VARCHAR), the result is\n  VARCHAR with maximum length determined by the longest character\n  length of the operands.\n\no If all types are character or binary string, the result is VARBINARY.\n\no SET and ENUM are treated similar to VARCHAR; the result is VARCHAR.\n\no If all types are JSON, the result is JSON.\n\no If all types are temporal, the result is temporal:\n\n  o If all temporal types are DATE, TIME, or TIMESTAMP, the result is\n    DATE, TIME, or TIMESTAMP, respectively.\n\n  o Otherwise, for a mix of temporal types, the result is DATETIME.\n\no If all types are GEOMETRY, the result is GEOMETRY.\n\no If any type is BLOB, the result is BLOB.\n\no For all other type combinations, the result is VARCHAR.\n\no Literal NULL operands are ignored for type aggregation.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html\n\n','mysql> SELECT CASE 1 WHEN 1 THEN \'one\'\n    ->     WHEN 2 THEN \'two\' ELSE \'more\' END;\n        -> \'one\'\nmysql> SELECT CASE WHEN 1>0 THEN \'true\' ELSE \'false\' END;\n        -> \'true\'\nmysql> SELECT CASE BINARY \'B\'\n    ->     WHEN \'a\' THEN 1 WHEN \'b\' THEN 2 END;\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html'),(81,'IF FUNCTION',12,'Syntax:\nIF(expr1,expr2,expr3)\n\nIf expr1 is TRUE (expr1 <> 0 and expr1 IS NOT NULL), IF() returns\nexpr2. Otherwise, it returns expr3.\n\n*Note*:\n\nThere is also an IF statement, which differs from the IF() function\ndescribed here. See [HELP IF statement].\n\nIf only one of expr2 or expr3 is explicitly NULL, the result type of\nthe IF() function is the type of the non-NULL expression.\n\nThe default return type of IF() (which may matter when it is stored\ninto a temporary table) is calculated as follows:\n\no If expr2 or expr3 produce a string, the result is a string.\n\n  If expr2 and expr3 are both strings, the result is case-sensitive if\n  either string is case-sensitive.\n\no If expr2 or expr3 produce a floating-point value, the result is a\n  floating-point value.\n\no If expr2 or expr3 produce an integer, the result is an integer.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html\n\n','mysql> SELECT IF(1>2,2,3);\n        -> 3\nmysql> SELECT IF(1<2,\'yes\',\'no\');\n        -> \'yes\'\nmysql> SELECT IF(STRCMP(\'test\',\'test1\'),\'no\',\'yes\');\n        -> \'no\'\n','https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html'),(82,'IFNULL',12,'Syntax:\nIFNULL(expr1,expr2)\n\nIf expr1 is not NULL, IFNULL() returns expr1; otherwise it returns\nexpr2.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html\n\n','mysql> SELECT IFNULL(1,0);\n        -> 1\nmysql> SELECT IFNULL(NULL,10);\n        -> 10\nmysql> SELECT IFNULL(1/0,10);\n        -> 10\nmysql> SELECT IFNULL(1/0,\'yes\');\n        -> \'yes\'\n','https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html'),(83,'NULLIF',12,'Syntax:\nNULLIF(expr1,expr2)\n\nReturns NULL if expr1 = expr2 is true, otherwise returns expr1. This is\nthe same as CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.\n\nThe return value has the same type as the first argument.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html\n\n','mysql> SELECT NULLIF(1,1);\n        -> NULL\nmysql> SELECT NULLIF(1,2);\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html'),(84,'+',13,'Syntax:\n+\n\nAddition:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html\n\n','mysql> SELECT 3+5;\n        -> 8\n','https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html'),(85,'- BINARY',13,'Syntax:\n-\n\nSubtraction:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html\n\n','mysql> SELECT 3-5;\n        -> -2\n','https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html'),(86,'- UNARY',13,'Syntax:\n-\n\nUnary minus. This operator changes the sign of the operand.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html\n\n','mysql> SELECT - 2;\n        -> -2\n','https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html'),(87,'*',13,'Syntax:\n*\n\nMultiplication:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html\n\n','mysql> SELECT 3*5;\n        -> 15\nmysql> SELECT 18014398509481984*18014398509481984.0;\n        -> 324518553658426726783156020576256.0\nmysql> SELECT 18014398509481984*18014398509481984;\n        -> out-of-range error\n','https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html'),(88,'/',13,'Syntax:\n/\n\nDivision:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html\n\n','mysql> SELECT 3/5;\n        -> 0.60\n','https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html'),(89,'DIV',13,'Syntax:\nDIV\n\nInteger division. Discards from the division result any fractional part\nto the right of the decimal point.\n\nIf either operand has a noninteger type, the operands are converted to\nDECIMAL and divided using DECIMAL arithmetic before converting the\nresult to BIGINT. If the result exceeds BIGINT range, an error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html\n\n','mysql> SELECT 5 DIV 2, -5 DIV 2, 5 DIV -2, -5 DIV -2;\n        -> 2, -2, -2, 2\n','https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html'),(90,'%',13,'Syntax:\nN % M, N MOD M\n\nModulo operation. Returns the remainder of N divided by M. For more\ninformation, see the description for the MOD() function in\nhttps://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html'),(91,'ABS',13,'Syntax:\nABS(X)\n\nReturns the absolute value of X, or NULL if X is NULL.\n\nThe result type is derived from the argument type. An implication of\nthis is that ABS(-9223372036854775808) produces an error because the\nresult cannot be stored in a signed BIGINT value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT ABS(2);\n        -> 2\nmysql> SELECT ABS(-32);\n        -> 32\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(92,'ACOS',13,'Syntax:\nACOS(X)\n\nReturns the arc cosine of X, that is, the value whose cosine is X.\nReturns NULL if X is not in the range -1 to 1, or if X is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT ACOS(1);\n        -> 0\nmysql> SELECT ACOS(1.0001);\n        -> NULL\nmysql> SELECT ACOS(0);\n        -> 1.5707963267949\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(93,'ASIN',13,'Syntax:\nASIN(X)\n\nReturns the arc sine of X, that is, the value whose sine is X. Returns\nNULL if X is not in the range -1 to 1, or if X is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT ASIN(0.2);\n        -> 0.20135792079033\nmysql> SELECT ASIN(\'foo\');\n\n+-------------+\n| ASIN(\'foo\') |\n+-------------+\n|           0 |\n+-------------+\n1 row in set, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS;\n+---------+------+-----------------------------------------+\n| Level   | Code | Message                                 |\n+---------+------+-----------------------------------------+\n| Warning | 1292 | Truncated incorrect DOUBLE value: \'foo\' |\n+---------+------+-----------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(94,'ATAN',13,'Syntax:\nATAN(X)\n\nReturns the arc tangent of X, that is, the value whose tangent is X.\nReturns NULL if X is NULL\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT ATAN(2);\n        -> 1.1071487177941\nmysql> SELECT ATAN(-2);\n        -> -1.1071487177941\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(95,'ATAN2',13,'Syntax:\nATAN(Y,X), ATAN2(Y,X)\n\nReturns the arc tangent of the two variables X and Y. It is similar to\ncalculating the arc tangent of Y / X, except that the signs of both\narguments are used to determine the quadrant of the result. Returns\nNULL if X or Y is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT ATAN(-2,2);\n        -> -0.78539816339745\nmysql> SELECT ATAN2(PI(),0);\n        -> 1.5707963267949\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(96,'CEIL',13,'Syntax:\nCEIL(X)\n\nCEIL() is a synonym for CEILING().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(97,'CEILING',13,'Syntax:\nCEILING(X)\n\nReturns the smallest integer value not less than X. Returns NULL if X\nis NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT CEILING(1.23);\n        -> 2\nmysql> SELECT CEILING(-1.23);\n        -> -1\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(98,'CONV',13,'Syntax:\nCONV(N,from_base,to_base)\n\nConverts numbers between different number bases. Returns a string\nrepresentation of the number N, converted from base from_base to base\nto_base. Returns NULL if any argument is NULL. The argument N is\ninterpreted as an integer, but may be specified as an integer or a\nstring. The minimum base is 2 and the maximum base is 36. If from_base\nis a negative number, N is regarded as a signed number. Otherwise, N is\ntreated as unsigned. CONV() works with 64-bit precision.\n\nCONV() returns NULL if any of its arguments are NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT CONV(\'a\',16,2);\n        -> \'1010\'\nmysql> SELECT CONV(\'6E\',18,8);\n        -> \'172\'\nmysql> SELECT CONV(-17,10,-18);\n        -> \'-H\'\nmysql> SELECT CONV(10+\'10\'+\'10\'+X\'0a\',10,10);\n        -> \'40\'\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(99,'COS',13,'Syntax:\nCOS(X)\n\nReturns the cosine of X, where X is given in radians. Returns NULL if X\nis NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT COS(PI());\n        -> -1\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(100,'COT',13,'Syntax:\nCOT(X)\n\nReturns the cotangent of X. Returns NULL if X is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT COT(12);\n        -> -1.5726734063977\nmysql> SELECT COT(0);\n        -> out-of-range error\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(101,'CRC32',13,'Syntax:\nCRC32(expr)\n\nComputes a cyclic redundancy check value and returns a 32-bit unsigned\nvalue. The result is NULL if the argument is NULL. The argument is\nexpected to be a string and (if possible) is treated as one if it is\nnot.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT CRC32(\'MySQL\');\n        -> 3259397556\nmysql> SELECT CRC32(\'mysql\');\n        -> 2501908538\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(102,'DEGREES',13,'Syntax:\nDEGREES(X)\n\nReturns the argument X, converted from radians to degrees. Returns NULL\nif X is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT DEGREES(PI());\n        -> 180\nmysql> SELECT DEGREES(PI() / 2);\n        -> 90\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(103,'EXP',13,'Syntax:\nEXP(X)\n\nReturns the value of e (the base of natural logarithms) raised to the\npower of X. The inverse of this function is LOG() (using a single\nargument only) or LN().\n\nIf X is NULL, this function returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT EXP(2);\n        -> 7.3890560989307\nmysql> SELECT EXP(-2);\n        -> 0.13533528323661\nmysql> SELECT EXP(0);\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(104,'FLOOR',13,'Syntax:\nFLOOR(X)\n\nReturns the largest integer value not greater than X. Returns NULL if X\nis NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT FLOOR(1.23), FLOOR(-1.23);\n        -> 1, -2\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(105,'LN',13,'Syntax:\nLN(X)\n\nReturns the natural logarithm of X; that is, the base-e logarithm of X.\nIf X is less than or equal to 0.0E0, the function returns NULL and a\nwarning \"Invalid argument for logarithm\" is reported. Returns NULL if X\nis NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT LN(2);\n        -> 0.69314718055995\nmysql> SELECT LN(-2);\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(106,'LOG',13,'Syntax:\nLOG(X), LOG(B,X)\n\nIf called with one parameter, this function returns the natural\nlogarithm of X. If X is less than or equal to 0.0E0, the function\nreturns NULL and a warning \"Invalid argument for logarithm\" is\nreported. Returns NULL if X or B is NULL.\n\nThe inverse of this function (when called with a single argument) is\nthe EXP() function.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT LOG(2);\n        -> 0.69314718055995\nmysql> SELECT LOG(-2);\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(107,'LOG2',13,'Syntax:\nLOG2(X)\n\nReturns the base-2 logarithm of X. If X is less than or equal to 0.0E0,\nthe function returns NULL and a warning \"Invalid argument for\nlogarithm\" is reported. Returns NULL if X is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT LOG2(65536);\n        -> 16\nmysql> SELECT LOG2(-100);\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(108,'LOG10',13,'Syntax:\nLOG10(X)\n\nReturns the base-10 logarithm of X. If X is less than or equal to\n0.0E0, the function returns NULL and a warning \"Invalid argument for\nlogarithm\" is reported. Returns NULL if X is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT LOG10(2);\n        -> 0.30102999566398\nmysql> SELECT LOG10(100);\n        -> 2\nmysql> SELECT LOG10(-100);\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(109,'MOD',13,'Syntax:\nMOD(N,M), N % M, N MOD M\n\nModulo operation. Returns the remainder of N divided by M. Returns NULL\nif M or N is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT MOD(234, 10);\n        -> 4\nmysql> SELECT 253 % 7;\n        -> 1\nmysql> SELECT MOD(29,9);\n        -> 2\nmysql> SELECT 29 MOD 9;\n        -> 2\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(110,'PI',13,'Syntax:\nPI()\n\nReturns the value of π (pi). The default number of decimal places\ndisplayed is seven, but MySQL uses the full double-precision value\ninternally.\n\nBecause the return value of this function is a double-precision value,\nits exact representation may vary between platforms or implementations.\nThis also applies to any expressions making use of PI(). See\nhttps://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT PI();\n        -> 3.141593\nmysql> SELECT PI()+0.000000000000000000;\n        -> 3.141592653589793000\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(111,'POW',13,'Syntax:\nPOW(X,Y)\n\nReturns the value of X raised to the power of Y. Returns NULL if X or Y\nis NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT POW(2,2);\n        -> 4\nmysql> SELECT POW(2,-2);\n        -> 0.25\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(112,'POWER',13,'Syntax:\nPOWER(X,Y)\n\nThis is a synonym for POW().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(113,'RADIANS',13,'Syntax:\nRADIANS(X)\n\nReturns the argument X, converted from degrees to radians. (Note that\nπ radians equals 180 degrees.) Returns NULL if X is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT RADIANS(90);\n        -> 1.5707963267949\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(114,'RAND',13,'Syntax:\nRAND([N])\n\nReturns a random floating-point value v in the range 0 <= v < 1.0. To\nobtain a random integer R in the range i <= R < j, use the expression\nFLOOR(i + RAND() * (j − i)). For example, to obtain a random integer\nin the range the range 7 <= R < 12, use the following statement:\n\nSELECT FLOOR(7 + (RAND() * 5));\n\nIf an integer argument N is specified, it is used as the seed value:\n\no With a constant initializer argument, the seed is initialized once\n  when the statement is prepared, prior to execution.\n\no With a nonconstant initializer argument (such as a column name), the\n  seed is initialized with the value for each invocation of RAND().\n\nOne implication of this behavior is that for equal argument values,\nRAND(N) returns the same value each time, and thus produces a\nrepeatable sequence of column values. In the following example, the\nsequence of values produced by RAND(3) is the same both places it\noccurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> CREATE TABLE t (i INT);\nQuery OK, 0 rows affected (0.42 sec)\n\nmysql> INSERT INTO t VALUES(1),(2),(3);\nQuery OK, 3 rows affected (0.00 sec)\nRecords: 3  Duplicates: 0  Warnings: 0\n\nmysql> SELECT i, RAND() FROM t;\n+------+------------------+\n| i    | RAND()           |\n+------+------------------+\n|    1 | 0.61914388706828 |\n|    2 | 0.93845168309142 |\n|    3 | 0.83482678498591 |\n+------+------------------+\n3 rows in set (0.00 sec)\n\nmysql> SELECT i, RAND(3) FROM t;\n+------+------------------+\n| i    | RAND(3)          |\n+------+------------------+\n|    1 | 0.90576975597606 |\n|    2 | 0.37307905813035 |\n|    3 | 0.14808605345719 |\n+------+------------------+\n3 rows in set (0.00 sec)\n\nmysql> SELECT i, RAND() FROM t;\n+------+------------------+\n| i    | RAND()           |\n+------+------------------+\n|    1 | 0.35877890638893 |\n|    2 | 0.28941420772058 |\n|    3 | 0.37073435016976 |\n+------+------------------+\n3 rows in set (0.00 sec)\n\nmysql> SELECT i, RAND(3) FROM t;\n+------+------------------+\n| i    | RAND(3)          |\n+------+------------------+\n|    1 | 0.90576975597606 |\n|    2 | 0.37307905813035 |\n|    3 | 0.14808605345719 |\n+------+------------------+\n3 rows in set (0.01 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(115,'ROUND',13,'Syntax:\nROUND(X), ROUND(X,D)\n\nRounds the argument X to D decimal places. The rounding algorithm\ndepends on the data type of X. D defaults to 0 if not specified. D can\nbe negative to cause D digits left of the decimal point of the value X\nto become zero. The maximum absolute value for D is 30; any digits in\nexcess of 30 (or -30) are truncated. If X or D is NULL, the function\nreturns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT ROUND(-1.23);\n        -> -1\nmysql> SELECT ROUND(-1.58);\n        -> -2\nmysql> SELECT ROUND(1.58);\n        -> 2\nmysql> SELECT ROUND(1.298, 1);\n        -> 1.3\nmysql> SELECT ROUND(1.298, 0);\n        -> 1\nmysql> SELECT ROUND(23.298, -1);\n        -> 20\nmysql> SELECT ROUND(.12345678901234567890123456789012345, 35);\n        -> 0.123456789012345678901234567890\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(116,'SIGN',13,'Syntax:\nSIGN(X)\n\nReturns the sign of the argument as -1, 0, or 1, depending on whether X\nis negative, zero, or positive. Returns NULL if X is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT SIGN(-32);\n        -> -1\nmysql> SELECT SIGN(0);\n        -> 0\nmysql> SELECT SIGN(234);\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(117,'SIN',13,'Syntax:\nSIN(X)\n\nReturns the sine of X, where X is given in radians. Returns NULL if X\nis NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT SIN(PI());\n        -> 1.2246063538224e-16\nmysql> SELECT ROUND(SIN(PI()));\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(118,'SQRT',13,'Syntax:\nSQRT(X)\n\nReturns the square root of a nonnegative number X. If X is NULL, the\nfunction returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT SQRT(4);\n        -> 2\nmysql> SELECT SQRT(20);\n        -> 4.4721359549996\nmysql> SELECT SQRT(-16);\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(119,'TAN',13,'Syntax:\nTAN(X)\n\nReturns the tangent of X, where X is given in radians. Returns NULL if\nX is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT TAN(PI());\n        -> -1.2246063538224e-16\nmysql> SELECT TAN(PI()+1);\n        -> 1.5574077246549\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(120,'TRUNCATE',13,'Syntax:\nTRUNCATE(X,D)\n\nReturns the number X, truncated to D decimal places. If D is 0, the\nresult has no decimal point or fractional part. D can be negative to\ncause D digits left of the decimal point of the value X to become zero.\nIf X or D is NULL, the function returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html\n\n','mysql> SELECT TRUNCATE(1.223,1);\n        -> 1.2\nmysql> SELECT TRUNCATE(1.999,1);\n        -> 1.9\nmysql> SELECT TRUNCATE(1.999,0);\n        -> 1\nmysql> SELECT TRUNCATE(-1.999,1);\n        -> -1.9\nmysql> SELECT TRUNCATE(122,-2);\n       -> 100\nmysql> SELECT TRUNCATE(10.28*100,0);\n       -> 1028\n','https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html'),(121,'ADDDATE',14,'Syntax:\nADDDATE(date,INTERVAL expr unit), ADDDATE(date,days)\n\nWhen invoked with the INTERVAL form of the second argument, ADDDATE()\nis a synonym for DATE_ADD(). The related function SUBDATE() is a\nsynonym for DATE_SUB(). For information on the INTERVAL unit argument,\nsee\nhttps://dev.mysql.com/doc/refman/8.0/en/expressions.html#temporal-inter\nvals.\n\nmysql> SELECT DATE_ADD(\'2008-01-02\', INTERVAL 31 DAY);\n        -> \'2008-02-02\'\nmysql> SELECT ADDDATE(\'2008-01-02\', INTERVAL 31 DAY);\n        -> \'2008-02-02\'\n\nWhen invoked with the days form of the second argument, MySQL treats it\nas an integer number of days to be added to expr.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT ADDDATE(\'2008-01-02\', 31);\n        -> \'2008-02-02\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(122,'ADDTIME',14,'Syntax:\nADDTIME(expr1,expr2)\n\nADDTIME() adds expr2 to expr1 and returns the result. expr1 is a time\nor datetime expression, and expr2 is a time expression. Returns NULL if\nexpr1or expr2 is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT ADDTIME(\'2007-12-31 23:59:59.999999\', \'1 1:1:1.000002\');\n        -> \'2008-01-02 01:01:01.000001\'\nmysql> SELECT ADDTIME(\'01:00:00.999999\', \'02:00:00.999998\');\n        -> \'03:00:01.999997\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(123,'CONVERT_TZ',14,'Syntax:\nCONVERT_TZ(dt,from_tz,to_tz)\n\nCONVERT_TZ() converts a datetime value dt from the time zone given by\nfrom_tz to the time zone given by to_tz and returns the resulting\nvalue. Time zones are specified as described in\nhttps://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html. This\nfunction returns NULL if any of the arguments are invalid, or if any of\nthem are NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT CONVERT_TZ(\'2004-01-01 12:00:00\',\'GMT\',\'MET\');\n        -> \'2004-01-01 13:00:00\'\nmysql> SELECT CONVERT_TZ(\'2004-01-01 12:00:00\',\'+00:00\',\'+10:00\');\n        -> \'2004-01-01 22:00:00\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(124,'CURDATE',14,'Syntax:\nCURDATE()\n\nReturns the current date as a value in \'YYYY-MM-DD\' or YYYYMMDD format,\ndepending on whether the function is used in string or numeric context.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT CURDATE();\n        -> \'2008-06-13\'\nmysql> SELECT CURDATE() + 0;\n        -> 20080613\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(125,'CURRENT_DATE',14,'Syntax:\nCURRENT_DATE, CURRENT_DATE()\n\nCURRENT_DATE and CURRENT_DATE() are synonyms for CURDATE().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(126,'CURRENT_TIME',14,'Syntax:\nCURRENT_TIME, CURRENT_TIME([fsp])\n\nCURRENT_TIME and CURRENT_TIME() are synonyms for CURTIME().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(127,'CURRENT_TIMESTAMP',14,'Syntax:\nCURRENT_TIMESTAMP, CURRENT_TIMESTAMP([fsp])\n\nCURRENT_TIMESTAMP and CURRENT_TIMESTAMP() are synonyms for NOW().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(128,'CURTIME',14,'Syntax:\nCURTIME([fsp])\n\nReturns the current time as a value in \'hh:mm:ss\' or hhmmss format,\ndepending on whether the function is used in string or numeric context.\nThe value is expressed in the session time zone.\n\nIf the fsp argument is given to specify a fractional seconds precision\nfrom 0 to 6, the return value includes a fractional seconds part of\nthat many digits.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT CURTIME();\n+-----------+\n| CURTIME() |\n+-----------+\n| 19:25:37  |\n+-----------+\n\nmysql> SELECT CURTIME() + 0;\n+---------------+\n| CURTIME() + 0 |\n+---------------+\n|        192537 |\n+---------------+\n\nmysql> SELECT CURTIME(3);\n+--------------+\n| CURTIME(3)   |\n+--------------+\n| 19:25:37.840 |\n+--------------+\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(129,'DATE FUNCTION',14,'Syntax:\nDATE(expr)\n\nExtracts the date part of the date or datetime expression expr. Returns\nNULL if expr is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT DATE(\'2003-12-31 01:02:03\');\n        -> \'2003-12-31\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(130,'DATEDIFF',14,'Syntax:\nDATEDIFF(expr1,expr2)\n\nDATEDIFF() returns expr1 − expr2 expressed as a value in days from\none date to the other. expr1 and expr2 are date or date-and-time\nexpressions. Only the date parts of the values are used in the\ncalculation.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT DATEDIFF(\'2007-12-31 23:59:59\',\'2007-12-30\');\n        -> 1\nmysql> SELECT DATEDIFF(\'2010-11-30 23:59:59\',\'2010-12-31\');\n        -> -31\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(131,'DATE_ADD',14,'Syntax:\nDATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)\n\nThese functions perform date arithmetic. The date argument specifies\nthe starting date or datetime value. expr is an expression specifying\nthe interval value to be added or subtracted from the starting date.\nexpr is evaluated as a string; it may start with a - for negative\nintervals. unit is a keyword indicating the units in which the\nexpression should be interpreted.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT DATE_ADD(\'2018-05-01\',INTERVAL 1 DAY);\n        -> \'2018-05-02\'\nmysql> SELECT DATE_SUB(\'2018-05-01\',INTERVAL 1 YEAR);\n        -> \'2017-05-01\'\nmysql> SELECT DATE_ADD(\'2020-12-31 23:59:59\',\n    ->                 INTERVAL 1 SECOND);\n        -> \'2021-01-01 00:00:00\'\nmysql> SELECT DATE_ADD(\'2018-12-31 23:59:59\',\n    ->                 INTERVAL 1 DAY);\n        -> \'2019-01-01 23:59:59\'\nmysql> SELECT DATE_ADD(\'2100-12-31 23:59:59\',\n    ->                 INTERVAL \'1:1\' MINUTE_SECOND);\n        -> \'2101-01-01 00:01:00\'\nmysql> SELECT DATE_SUB(\'2025-01-01 00:00:00\',\n    ->                 INTERVAL \'1 1:1:1\' DAY_SECOND);\n        -> \'2024-12-30 22:58:59\'\nmysql> SELECT DATE_ADD(\'1900-01-01 00:00:00\',\n    ->                 INTERVAL \'-1 10\' DAY_HOUR);\n        -> \'1899-12-30 14:00:00\'\nmysql> SELECT DATE_SUB(\'1998-01-02\', INTERVAL 31 DAY);\n        -> \'1997-12-02\'\nmysql> SELECT DATE_ADD(\'1992-12-31 23:59:59.000002\',\n    ->            INTERVAL \'1.999999\' SECOND_MICROSECOND);\n        -> \'1993-01-01 00:00:01.000001\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(132,'DATE_FORMAT',14,'Syntax:\nDATE_FORMAT(date,format)\n\nFormats the date value according to the format string. If either\nargument is NULL, the function returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT DATE_FORMAT(\'2009-10-04 22:23:00\', \'%W %M %Y\');\n        -> \'Sunday October 2009\'\nmysql> SELECT DATE_FORMAT(\'2007-10-04 22:23:00\', \'%H:%i:%s\');\n        -> \'22:23:00\'\nmysql> SELECT DATE_FORMAT(\'1900-10-04 22:23:00\',\n    ->                 \'%D %y %a %d %m %b %j\');\n        -> \'4th 00 Thu 04 10 Oct 277\'\nmysql> SELECT DATE_FORMAT(\'1997-10-04 22:23:00\',\n    ->                 \'%H %k %I %r %T %S %w\');\n        -> \'22 22 10 10:23:00 PM 22:23:00 00 6\'\nmysql> SELECT DATE_FORMAT(\'1999-01-01\', \'%X %V\');\n        -> \'1998 52\'\nmysql> SELECT DATE_FORMAT(\'2006-06-00\', \'%d\');\n        -> \'00\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(133,'DATE_SUB',14,'Syntax:\nDATE_SUB(date,INTERVAL expr unit)\n\nSee the description for DATE_ADD().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(134,'DAY',14,'Syntax:\nDAY(date)\n\nDAY() is a synonym for DAYOFMONTH().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(135,'DAYNAME',14,'Syntax:\nDAYNAME(date)\n\nReturns the name of the weekday for date. The language used for the\nname is controlled by the value of the lc_time_names system variable\n(see https://dev.mysql.com/doc/refman/8.0/en/locale-support.html).\nReturns NULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT DAYNAME(\'2007-02-03\');\n        -> \'Saturday\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(136,'DAYOFMONTH',14,'Syntax:\nDAYOFMONTH(date)\n\nReturns the day of the month for date, in the range 1 to 31, or 0 for\ndates such as \'0000-00-00\' or \'2008-00-00\' that have a zero day part.\nReturns NULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFMONTH(\'2007-02-03\');\n        -> 3\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(137,'DAYOFWEEK',14,'Syntax:\nDAYOFWEEK(date)\n\nReturns the weekday index for date (1 = Sunday, 2 = Monday, ..., 7 =\nSaturday). These index values correspond to the ODBC standard. Returns\nNULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFWEEK(\'2007-02-03\');\n        -> 7\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(138,'DAYOFYEAR',14,'Syntax:\nDAYOFYEAR(date)\n\nReturns the day of the year for date, in the range 1 to 366. Returns\nNULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFYEAR(\'2007-02-03\');\n        -> 34\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(139,'EXTRACT',14,'Syntax:\nEXTRACT(unit FROM date)\n\nThe EXTRACT() function uses the same kinds of unit specifiers as\nDATE_ADD() or DATE_SUB(), but extracts parts from the date rather than\nperforming date arithmetic. For information on the unit argument, see\nhttps://dev.mysql.com/doc/refman/8.0/en/expressions.html#temporal-inter\nvals. Returns NULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT EXTRACT(YEAR FROM \'2019-07-02\');\n        -> 2019\nmysql> SELECT EXTRACT(YEAR_MONTH FROM \'2019-07-02 01:02:03\');\n        -> 201907\nmysql> SELECT EXTRACT(DAY_MINUTE FROM \'2019-07-02 01:02:03\');\n        -> 20102\nmysql> SELECT EXTRACT(MICROSECOND\n    ->                FROM \'2003-01-02 10:30:00.000123\');\n        -> 123\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(140,'FROM_DAYS',14,'Syntax:\nFROM_DAYS(N)\n\nGiven a day number N, returns a DATE value. Returns NULL if N is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT FROM_DAYS(730669);\n        -> \'2000-07-03\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(141,'FROM_UNIXTIME',14,'Syntax:\nFROM_UNIXTIME(unix_timestamp[,format])\n\nReturns a representation of unix_timestamp as a datetime or character\nstring value. The value returned is expressed using the session time\nzone. (Clients can set the session time zone as described in\nhttps://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html.)\nunix_timestamp is an internal timestamp value representing seconds\nsince \'1970-01-01 00:00:00\' UTC, such as produced by the\nUNIX_TIMESTAMP() function.\n\nIf format is omitted, this function returns a DATETIME value.\n\nIf unix_timestamp or format is NULL, this function returns NULL.\n\nIf unix_timestamp is an integer, the fractional seconds precision of\nthe DATETIME is zero. When unix_timestamp is a decimal value, the\nfractional seconds precision of the DATETIME is the same as the\nprecision of the decimal value, up to a maximum of 6. When\nunix_timestamp is a floating point number, the fractional seconds\nprecision of the datetime is 6.\n\nOn 32-bit platforms, the maximum useful value for unix_timestamp is\n2147483647.999999, which returns \'2038-01-19 03:14:07.999999\' UTC. On\n64-bit platforms running MySQL 8.0.28 or later, the effective maximum\nis 32536771199.999999, which returns \'3001-01-18 23:59:59.999999\' UTC.\nRegardless of platform or version, a greater value for unix_timestamp\nthan the effective maximum returns 0.\n\nformat is used to format the result in the same way as the format\nstring used for the DATE_FORMAT() function. If format is supplied, the\nvalue returned is a VARCHAR.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT FROM_UNIXTIME(1447430881);\n        -> \'2015-11-13 10:08:01\'\nmysql> SELECT FROM_UNIXTIME(1447430881) + 0;\n        -> 20151113100801\nmysql> SELECT FROM_UNIXTIME(1447430881,\n    ->                      \'%Y %D %M %h:%i:%s %x\');\n        -> \'2015 13th November 10:08:01 2015\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(142,'GET_FORMAT',14,'Syntax:\nGET_FORMAT({DATE|TIME|DATETIME}, {\'EUR\'|\'USA\'|\'JIS\'|\'ISO\'|\'INTERNAL\'})\n\nReturns a format string. This function is useful in combination with\nthe DATE_FORMAT() and the STR_TO_DATE() functions.\n\nIf format is NULL, this function returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT DATE_FORMAT(\'2003-10-03\',GET_FORMAT(DATE,\'EUR\'));\n        -> \'03.10.2003\'\nmysql> SELECT STR_TO_DATE(\'10.31.2003\',GET_FORMAT(DATE,\'USA\'));\n        -> \'2003-10-31\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(143,'HOUR',14,'Syntax:\nHOUR(time)\n\nReturns the hour for time. The range of the return value is 0 to 23 for\ntime-of-day values. However, the range of TIME values actually is much\nlarger, so HOUR can return values greater than 23. Returns NULL if time\nis NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT HOUR(\'10:05:03\');\n        -> 10\nmysql> SELECT HOUR(\'272:59:59\');\n        -> 272\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(144,'LAST_DAY',14,'Syntax:\nLAST_DAY(date)\n\nTakes a date or datetime value and returns the corresponding value for\nthe last day of the month. Returns NULL if the argument is invalid or\nNULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT LAST_DAY(\'2003-02-05\');\n        -> \'2003-02-28\'\nmysql> SELECT LAST_DAY(\'2004-02-05\');\n        -> \'2004-02-29\'\nmysql> SELECT LAST_DAY(\'2004-01-01 01:01:01\');\n        -> \'2004-01-31\'\nmysql> SELECT LAST_DAY(\'2003-03-32\');\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(145,'LOCALTIME',14,'Syntax:\nLOCALTIME, LOCALTIME([fsp])\n\nLOCALTIME and LOCALTIME() are synonyms for NOW().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(146,'LOCALTIMESTAMP',14,'Syntax:\nLOCALTIMESTAMP, LOCALTIMESTAMP([fsp])\n\nLOCALTIMESTAMP and LOCALTIMESTAMP() are synonyms for NOW().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(147,'MAKEDATE',14,'Syntax:\nMAKEDATE(year,dayofyear)\n\nReturns a date, given year and day-of-year values. dayofyear must be\ngreater than 0 or the result is NULL. The result is also NULL if either\nargument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);\n        -> \'2011-01-31\', \'2011-02-01\'\nmysql> SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);\n        -> \'2011-12-31\', \'2014-12-31\'\nmysql> SELECT MAKEDATE(2011,0);\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(148,'MAKETIME',14,'Syntax:\nMAKETIME(hour,minute,second)\n\nReturns a time value calculated from the hour, minute, and second\narguments. Returns NULL if any of its arguments are NULL.\n\nThe second argument can have a fractional part.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT MAKETIME(12,15,30);\n        -> \'12:15:30\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(149,'MICROSECOND',14,'Syntax:\nMICROSECOND(expr)\n\nReturns the microseconds from the time or datetime expression expr as a\nnumber in the range from 0 to 999999. Returns NULL if expr is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT MICROSECOND(\'12:00:00.123456\');\n        -> 123456\nmysql> SELECT MICROSECOND(\'2019-12-31 23:59:59.000010\');\n        -> 10\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(150,'MINUTE',14,'Syntax:\nMINUTE(time)\n\nReturns the minute for time, in the range 0 to 59, or NULL if time is\nNULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT MINUTE(\'2008-02-03 10:05:03\');\n        -> 5\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(151,'MONTH',14,'Syntax:\nMONTH(date)\n\nReturns the month for date, in the range 1 to 12 for January to\nDecember, or 0 for dates such as \'0000-00-00\' or \'2008-00-00\' that have\na zero month part. Returns NULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT MONTH(\'2008-02-03\');\n        -> 2\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(152,'MONTHNAME',14,'Syntax:\nMONTHNAME(date)\n\nReturns the full name of the month for date. The language used for the\nname is controlled by the value of the lc_time_names system variable\n(https://dev.mysql.com/doc/refman/8.0/en/locale-support.html). Returns\nNULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT MONTHNAME(\'2008-02-03\');\n        -> \'February\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(153,'NOW',14,'Syntax:\nNOW([fsp])\n\nReturns the current date and time as a value in \'YYYY-MM-DD hh:mm:ss\'\nor YYYYMMDDhhmmss format, depending on whether the function is used in\nstring or numeric context. The value is expressed in the session time\nzone.\n\nIf the fsp argument is given to specify a fractional seconds precision\nfrom 0 to 6, the return value includes a fractional seconds part of\nthat many digits.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT NOW();\n        -> \'2007-12-15 23:50:26\'\nmysql> SELECT NOW() + 0;\n        -> 20071215235026.000000\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(154,'PERIOD_ADD',14,'Syntax:\nPERIOD_ADD(P,N)\n\nAdds N months to period P (in the format YYMM or YYYYMM). Returns a\nvalue in the format YYYYMM.\n\n*Note*:\n\nThe period argument P is not a date value.\n\nThis function returns NULL if P or N is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT PERIOD_ADD(200801,2);\n        -> 200803\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(155,'PERIOD_DIFF',14,'Syntax:\nPERIOD_DIFF(P1,P2)\n\nReturns the number of months between periods P1 and P2. P1 and P2\nshould be in the format YYMM or YYYYMM. Note that the period arguments\nP1 and P2 are not date values.\n\nThis function returns NULL if P1 or P2 is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT PERIOD_DIFF(200802,200703);\n        -> 11\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(156,'QUARTER',14,'Syntax:\nQUARTER(date)\n\nReturns the quarter of the year for date, in the range 1 to 4, or NULL\nif date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT QUARTER(\'2008-04-01\');\n        -> 2\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(157,'SECOND',14,'Syntax:\nSECOND(time)\n\nReturns the second for time, in the range 0 to 59, or NULL if time is\nNULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT SECOND(\'10:05:03\');\n        -> 3\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(158,'SEC_TO_TIME',14,'Syntax:\nSEC_TO_TIME(seconds)\n\nReturns the seconds argument, converted to hours, minutes, and seconds,\nas a TIME value. The range of the result is constrained to that of the\nTIME data type. A warning occurs if the argument corresponds to a value\noutside that range.\n\nThe function returns NULL if seconds is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT SEC_TO_TIME(2378);\n        -> \'00:39:38\'\nmysql> SELECT SEC_TO_TIME(2378) + 0;\n        -> 3938\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(159,'STR_TO_DATE',14,'Syntax:\nSTR_TO_DATE(str,format)\n\nThis is the inverse of the DATE_FORMAT() function. It takes a string\nstr and a format string format. STR_TO_DATE() returns a DATETIME value\nif the format string contains both date and time parts, or a DATE or\nTIME value if the string contains only date or time parts. If str or\nformat is NULL, the function returns NULL. If the date, time, or\ndatetime value extracted from str cannot be parsed according to the\nrules followed by the server, STR_TO_DATE() returns NULL and produces a\nwarning.\n\nThe server scans str attempting to match format to it. The format\nstring can contain literal characters and format specifiers beginning\nwith %. Literal characters in format must match literally in str.\nFormat specifiers in format must match a date or time part in str. For\nthe specifiers that can be used in format, see the DATE_FORMAT()\nfunction description.\n\nmysql> SELECT STR_TO_DATE(\'01,5,2013\',\'%d,%m,%Y\');\n        -> \'2013-05-01\'\nmysql> SELECT STR_TO_DATE(\'May 1, 2013\',\'%M %d,%Y\');\n        -> \'2013-05-01\'\n\nScanning starts at the beginning of str and fails if format is found\nnot to match. Extra characters at the end of str are ignored.\n\nmysql> SELECT STR_TO_DATE(\'a09:30:17\',\'a%h:%i:%s\');\n        -> \'09:30:17\'\nmysql> SELECT STR_TO_DATE(\'a09:30:17\',\'%h:%i:%s\');\n        -> NULL\nmysql> SELECT STR_TO_DATE(\'09:30:17a\',\'%h:%i:%s\');\n        -> \'09:30:17\'\n\nUnspecified date or time parts have a value of 0, so incompletely\nspecified values in str produce a result with some or all parts set to\n0:\n\nmysql> SELECT STR_TO_DATE(\'abc\',\'abc\');\n        -> \'0000-00-00\'\nmysql> SELECT STR_TO_DATE(\'9\',\'%m\');\n        -> \'0000-09-00\'\nmysql> SELECT STR_TO_DATE(\'9\',\'%s\');\n        -> \'00:00:09\'\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(160,'SUBDATE',14,'Syntax:\nSUBDATE(date,INTERVAL expr unit), SUBDATE(expr,days)\n\nWhen invoked with the INTERVAL form of the second argument, SUBDATE()\nis a synonym for DATE_SUB(). For information on the INTERVAL unit\nargument, see the discussion for DATE_ADD().\n\nmysql> SELECT DATE_SUB(\'2008-01-02\', INTERVAL 31 DAY);\n        -> \'2007-12-02\'\nmysql> SELECT SUBDATE(\'2008-01-02\', INTERVAL 31 DAY);\n        -> \'2007-12-02\'\n\nThe second form enables the use of an integer value for days. In such\ncases, it is interpreted as the number of days to be subtracted from\nthe date or datetime expression expr.\n\nmysql> SELECT SUBDATE(\'2008-01-02 12:00:00\', 31);\n        -> \'2007-12-02 12:00:00\'\n\nThis function returns NULL if any of its arguments are NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(161,'SUBTIME',14,'Syntax:\nSUBTIME(expr1,expr2)\n\nSUBTIME() returns expr1 − expr2 expressed as a value in the same\nformat as expr1. expr1 is a time or datetime expression, and expr2 is a\ntime expression.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT SUBTIME(\'2007-12-31 23:59:59.999999\',\'1 1:1:1.000002\');\n        -> \'2007-12-30 22:58:58.999997\'\nmysql> SELECT SUBTIME(\'01:00:00.999999\', \'02:00:00.999998\');\n        -> \'-00:59:59.999999\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(162,'SYSDATE',14,'Syntax:\nSYSDATE([fsp])\n\nReturns the current date and time as a value in \'YYYY-MM-DD hh:mm:ss\'\nor YYYYMMDDhhmmss format, depending on whether the function is used in\nstring or numeric context.\n\nIf the fsp argument is given to specify a fractional seconds precision\nfrom 0 to 6, the return value includes a fractional seconds part of\nthat many digits.\n\nSYSDATE() returns the time at which it executes. This differs from the\nbehavior for NOW(), which returns a constant time that indicates the\ntime at which the statement began to execute. (Within a stored function\nor trigger, NOW() returns the time at which the function or triggering\nstatement began to execute.)\n\nmysql> SELECT NOW(), SLEEP(2), NOW();\n+---------------------+----------+---------------------+\n| NOW()               | SLEEP(2) | NOW()               |\n+---------------------+----------+---------------------+\n| 2006-04-12 13:47:36 |        0 | 2006-04-12 13:47:36 |\n+---------------------+----------+---------------------+\n\nmysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();\n+---------------------+----------+---------------------+\n| SYSDATE()           | SLEEP(2) | SYSDATE()           |\n+---------------------+----------+---------------------+\n| 2006-04-12 13:47:44 |        0 | 2006-04-12 13:47:46 |\n+---------------------+----------+---------------------+\n\nIn addition, the SET TIMESTAMP statement affects the value returned by\nNOW() but not by SYSDATE(). This means that timestamp settings in the\nbinary log have no effect on invocations of SYSDATE().\n\nBecause SYSDATE() can return different values even within the same\nstatement, and is not affected by SET TIMESTAMP, it is nondeterministic\nand therefore unsafe for replication if statement-based binary logging\nis used. If that is a problem, you can use row-based logging.\n\nAlternatively, you can use the --sysdate-is-now option to cause\nSYSDATE() to be an alias for NOW(). This works if the option is used on\nboth the replication source server and the replica.\n\nThe nondeterministic nature of SYSDATE() also means that indexes cannot\nbe used for evaluating expressions that refer to it.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(163,'TIME FUNCTION',14,'Syntax:\nTIME(expr)\n\nExtracts the time part of the time or datetime expression expr and\nreturns it as a string. Returns NULL if expr is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT TIME(\'2003-12-31 01:02:03\');\n        -> \'01:02:03\'\nmysql> SELECT TIME(\'2003-12-31 01:02:03.000123\');\n        -> \'01:02:03.000123\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(164,'TIMEDIFF',14,'Syntax:\nTIMEDIFF(expr1,expr2)\n\nTIMEDIFF() returns expr1 − expr2 expressed as a time value. expr1 and\nexpr2 are strings which are converted to TIME or DATETIME expressions;\nthese must be of the same type following conversion. Returns NULL if\nexpr1 or expr2 is NULL.\n\nThe result returned by TIMEDIFF() is limited to the range allowed for\nTIME values. Alternatively, you can use either of the functions\nTIMESTAMPDIFF() and UNIX_TIMESTAMP(), both of which return integers.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT TIMEDIFF(\'2000-01-01 00:00:00\',\n    ->                 \'2000-01-01 00:00:00.000001\');\n        -> \'-00:00:00.000001\'\nmysql> SELECT TIMEDIFF(\'2008-12-31 23:59:59.000001\',\n    ->                 \'2008-12-30 01:01:01.000002\');\n        -> \'46:58:57.999999\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(165,'TIMESTAMP FUNCTION',14,'Syntax:\nTIMESTAMP(expr), TIMESTAMP(expr1,expr2)\n\nWith a single argument, this function returns the date or datetime\nexpression expr as a datetime value. With two arguments, it adds the\ntime expression expr2 to the date or datetime expression expr1 and\nreturns the result as a datetime value. Returns NULL if expr, expr1, or\nexpr2 is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT TIMESTAMP(\'2003-12-31\');\n        -> \'2003-12-31 00:00:00\'\nmysql> SELECT TIMESTAMP(\'2003-12-31 12:00:00\',\'12:00:00\');\n        -> \'2004-01-01 00:00:00\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(166,'TIMESTAMPADD',14,'Syntax:\nTIMESTAMPADD(unit,interval,datetime_expr)\n\nAdds the integer expression interval to the date or datetime expression\ndatetime_expr. The unit for interval is given by the unit argument,\nwhich should be one of the following values: MICROSECOND\n(microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or\nYEAR.\n\nThe unit value may be specified using one of keywords as shown, or with\na prefix of SQL_TSI_. For example, DAY and SQL_TSI_DAY both are legal.\n\nThis function returns NULL if interval or datetime_expr is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT TIMESTAMPADD(MINUTE, 1, \'2003-01-02\');\n        -> \'2003-01-02 00:01:00\'\nmysql> SELECT TIMESTAMPADD(WEEK,1,\'2003-01-02\');\n        -> \'2003-01-09\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(167,'TIMESTAMPDIFF',14,'Syntax:\nTIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)\n\nReturns datetime_expr2 − datetime_expr1, where datetime_expr1 and\ndatetime_expr2 are date or datetime expressions. One expression may be\na date and the other a datetime; a date value is treated as a datetime\nhaving the time part \'00:00:00\' where necessary. The unit for the\nresult (an integer) is given by the unit argument. The legal values for\nunit are the same as those listed in the description of the\nTIMESTAMPADD() function.\n\nThis function returns NULL if datetime_expr1 or datetime_expr2 is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT TIMESTAMPDIFF(MONTH,\'2003-02-01\',\'2003-05-01\');\n        -> 3\nmysql> SELECT TIMESTAMPDIFF(YEAR,\'2002-05-01\',\'2001-01-01\');\n        -> -1\nmysql> SELECT TIMESTAMPDIFF(MINUTE,\'2003-02-01\',\'2003-05-01 12:05:55\');\n        -> 128885\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(168,'TIME_FORMAT',14,'Syntax:\nTIME_FORMAT(time,format)\n\nThis is used like the DATE_FORMAT() function, but the format string may\ncontain format specifiers only for hours, minutes, seconds, and\nmicroseconds. Other specifiers produce a NULL or 0. TIME_FORMAT()\nreturns NULL if time or format is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT TIME_FORMAT(\'100:00:00\', \'%H %k %h %I %l\');\n        -> \'100 100 04 04 4\'\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(169,'TIME_TO_SEC',14,'Syntax:\nTIME_TO_SEC(time)\n\nReturns the time argument, converted to seconds. Returns NULL if time\nis NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT TIME_TO_SEC(\'22:23:00\');\n        -> 80580\nmysql> SELECT TIME_TO_SEC(\'00:39:38\');\n        -> 2378\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(170,'TO_DAYS',14,'Syntax:\nTO_DAYS(date)\n\nGiven a date date, returns a day number (the number of days since year\n0). Returns NULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT TO_DAYS(950501);\n        -> 728779\nmysql> SELECT TO_DAYS(\'2007-10-07\');\n        -> 733321\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(171,'TO_SECONDS',14,'Syntax:\nTO_SECONDS(expr)\n\nGiven a date or datetime expr, returns the number of seconds since the\nyear 0. If expr is not a valid date or datetime value (including NULL),\nit returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT TO_SECONDS(950501);\n        -> 62966505600\nmysql> SELECT TO_SECONDS(\'2009-11-29\');\n        -> 63426672000\nmysql> SELECT TO_SECONDS(\'2009-11-29 13:43:32\');\n        -> 63426721412\nmysql> SELECT TO_SECONDS( NOW() );\n        -> 63426721458\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(172,'UNIX_TIMESTAMP',14,'Syntax:\nUNIX_TIMESTAMP([date])\n\nIf UNIX_TIMESTAMP() is called with no date argument, it returns a Unix\ntimestamp representing seconds since \'1970-01-01 00:00:00\' UTC.\n\nIf UNIX_TIMESTAMP() is called with a date argument, it returns the\nvalue of the argument as seconds since \'1970-01-01 00:00:00\' UTC. The\nserver interprets date as a value in the session time zone and converts\nit to an internal Unix timestamp value in UTC. (Clients can set the\nsession time zone as described in\nhttps://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html.) The\ndate argument may be a DATE, DATETIME, or TIMESTAMP string, or a number\nin YYMMDD, YYMMDDhhmmss, YYYYMMDD, or YYYYMMDDhhmmss format. If the\nargument includes a time part, it may optionally include a fractional\nseconds part.\n\nThe return value is an integer if no argument is given or the argument\ndoes not include a fractional seconds part, or DECIMAL if an argument\nis given that includes a fractional seconds part.\n\nWhen the date argument is a TIMESTAMP column, UNIX_TIMESTAMP() returns\nthe internal timestamp value directly, with no implicit\n\"string-to-Unix-timestamp\" conversion.\n\nPrior to MySQL 8.0.28, the valid range of argument values is the same\nas for the TIMESTAMP data type: \'1970-01-01 00:00:01.000000\' UTC to\n\'2038-01-19 03:14:07.999999\' UTC. This is also the case in MySQL 8.0.28\nand later for 32-bit platforms. For MySQL 8.0.28 and later running on\n64-bit platforms, the valid range of argument values for\nUNIX_TIMESTAMP() is \'1970-01-01 00:00:01.000000\' UTC to \'3001-01-19\n03:14:07.999999\' UTC (corresponding to 32536771199.999999 seconds).\n\nRegardless of MySQL version or platform architecture, if you pass an\nout-of-range date to UNIX_TIMESTAMP(), it returns 0. If date is NULL,\nit returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT UNIX_TIMESTAMP();\n        -> 1447431666\nmysql> SELECT UNIX_TIMESTAMP(\'2015-11-13 10:20:19\');\n        -> 1447431619\nmysql> SELECT UNIX_TIMESTAMP(\'2015-11-13 10:20:19.012\');\n        -> 1447431619.012\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(173,'UTC_DATE',14,'Syntax:\nUTC_DATE, UTC_DATE()\n\nReturns the current UTC date as a value in \'YYYY-MM-DD\' or YYYYMMDD\nformat, depending on whether the function is used in string or numeric\ncontext.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT UTC_DATE(), UTC_DATE() + 0;\n        -> \'2003-08-14\', 20030814\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(174,'UTC_TIME',14,'Syntax:\nUTC_TIME, UTC_TIME([fsp])\n\nReturns the current UTC time as a value in \'hh:mm:ss\' or hhmmss format,\ndepending on whether the function is used in string or numeric context.\n\nIf the fsp argument is given to specify a fractional seconds precision\nfrom 0 to 6, the return value includes a fractional seconds part of\nthat many digits.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT UTC_TIME(), UTC_TIME() + 0;\n        -> \'18:07:53\', 180753.000000\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(175,'UTC_TIMESTAMP',14,'Syntax:\nUTC_TIMESTAMP, UTC_TIMESTAMP([fsp])\n\nReturns the current UTC date and time as a value in \'YYYY-MM-DD\nhh:mm:ss\' or YYYYMMDDhhmmss format, depending on whether the function\nis used in string or numeric context.\n\nIf the fsp argument is given to specify a fractional seconds precision\nfrom 0 to 6, the return value includes a fractional seconds part of\nthat many digits.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;\n        -> \'2003-08-14 18:08:04\', 20030814180804.000000\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(176,'WEEK',14,'Syntax:\nWEEK(date[,mode])\n\nThis function returns the week number for date. The two-argument form\nof WEEK() enables you to specify whether the week starts on Sunday or\nMonday and whether the return value should be in the range from 0 to 53\nor from 1 to 53. If the mode argument is omitted, the value of the\ndefault_week_format system variable is used. See\nhttps://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html.\nFor a NULL date value, the function returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT WEEK(\'2008-02-20\');\n        -> 7\nmysql> SELECT WEEK(\'2008-02-20\',0);\n        -> 7\nmysql> SELECT WEEK(\'2008-02-20\',1);\n        -> 8\nmysql> SELECT WEEK(\'2008-12-31\',1);\n        -> 53\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(177,'WEEKDAY',14,'Syntax:\nWEEKDAY(date)\n\nReturns the weekday index for date (0 = Monday, 1 = Tuesday, ... 6 =\nSunday). Returns NULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT WEEKDAY(\'2008-02-03 22:23:00\');\n        -> 6\nmysql> SELECT WEEKDAY(\'2007-11-06\');\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(178,'WEEKOFYEAR',14,'Syntax:\nWEEKOFYEAR(date)\n\nReturns the calendar week of the date as a number in the range from 1\nto 53. Returns NULL if date is NULL.\n\nWEEKOFYEAR() is a compatibility function that is equivalent to\nWEEK(date,3).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT WEEKOFYEAR(\'2008-02-20\');\n        -> 8\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(179,'YEAR',14,'Syntax:\nYEAR(date)\n\nReturns the year for date, in the range 1000 to 9999, or 0 for the\n\"zero\" date. Returns NULL if date is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT YEAR(\'1987-01-01\');\n        -> 1987\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(180,'YEARWEEK',14,'Syntax:\nYEARWEEK(date), YEARWEEK(date,mode)\n\nReturns year and week for a date. The year in the result may be\ndifferent from the year in the date argument for the first and the last\nweek of the year. Returns NULL if date is NULL.\n\nThe mode argument works exactly like the mode argument to WEEK(). For\nthe single-argument syntax, a mode value of 0 is used. Unlike WEEK(),\nthe value of default_week_format does not influence YEARWEEK().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html\n\n','mysql> SELECT YEARWEEK(\'1987-01-01\');\n        -> 198652\n','https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html'),(181,'ASCII',15,'Syntax:\nASCII(str)\n\nReturns the numeric value of the leftmost character of the string str.\nReturns 0 if str is the empty string. Returns NULL if str is NULL.\nASCII() works for 8-bit characters.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT ASCII(\'2\');\n        -> 50\nmysql> SELECT ASCII(2);\n        -> 50\nmysql> SELECT ASCII(\'dx\');\n        -> 100\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(182,'BIN',15,'Syntax:\nBIN(N)\n\nReturns a string representation of the binary value of N, where N is a\nlonglong (BIGINT) number. This is equivalent to CONV(N,10,2). Returns\nNULL if N is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT BIN(12);\n        -> \'1100\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(183,'BIT_LENGTH',15,'Syntax:\nBIT_LENGTH(str)\n\nReturns the length of the string str in bits. Returns NULL if str is\nNULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT BIT_LENGTH(\'text\');\n        -> 32\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(184,'CHAR FUNCTION',15,'Syntax:\nCHAR(N,... [USING charset_name])\n\nCHAR() interprets each argument N as an integer and returns a string\nconsisting of the characters given by the code values of those\nintegers. NULL values are skipped.\n\nBy default, CHAR() returns a binary string. To produce a string in a\ngiven character set, use the optional USING clause:\n\nmysql> SELECT CHAR(77,121,83,81,\'76\' USING utf8mb4);\n+---------------------------------------+\n| CHAR(77,121,83,81,\'76\' USING utf8mb4) |\n+---------------------------------------+\n| MySQL                                 |\n+---------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT CHAR(77,77.3,\'77.3\' USING utf8mb4);\n+------------------------------------+\n| CHAR(77,77.3,\'77.3\' USING utf8mb4) |\n+------------------------------------+\n| MMM                                |\n+------------------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS;\n+---------+------+-------------------------------------------+\n| Level   | Code | Message                                   |\n+---------+------+-------------------------------------------+\n| Warning | 1292 | Truncated incorrect INTEGER value: \'77.3\' |\n+---------+------+-------------------------------------------+\n1 row in set (0.00 sec)\n\nIf USING is given and the result string is illegal for the given\ncharacter set, a warning is issued. Also, if strict SQL mode is\nenabled, the result from CHAR() becomes NULL.\n\nIf CHAR() is invoked from within the mysql client, binary strings\ndisplay using hexadecimal notation, depending on the value of the\n--binary-as-hex. For more information about that option, see\nhttps://dev.mysql.com/doc/refman/8.0/en/mysql.html.\n\nCHAR() arguments larger than 255 are converted into multiple result\nbytes. For example, CHAR(256) is equivalent to CHAR(1,0), and\nCHAR(256*256) is equivalent to CHAR(1,0,0):\n\nmysql> SELECT HEX(CHAR(1,0)), HEX(CHAR(256));\n+----------------+----------------+\n| HEX(CHAR(1,0)) | HEX(CHAR(256)) |\n+----------------+----------------+\n| 0100           | 0100           |\n+----------------+----------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256));\n+------------------+--------------------+\n| HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) |\n+------------------+--------------------+\n| 010000           | 010000             |\n+------------------+--------------------+\n1 row in set (0.00 sec)\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT CHAR(77,121,83,81,\'76\');\n+--------------------------------------------------+\n| CHAR(77,121,83,81,\'76\')                          |\n+--------------------------------------------------+\n| 0x4D7953514C                                     |\n+--------------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT CHAR(77,77.3,\'77.3\');\n+--------------------------------------------+\n| CHAR(77,77.3,\'77.3\')                       |\n+--------------------------------------------+\n| 0x4D4D4D                                   |\n+--------------------------------------------+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(185,'CHAR_LENGTH',15,'Syntax:\nCHAR_LENGTH(str)\n\nReturns the length of the string str, measured in code points. A\nmultibyte character counts as a single code point. This means that, for\na string containing two 3-byte characters, LENGTH() returns 6, whereas\nCHAR_LENGTH() returns 2, as shown here:\n\nmysql> SET @dolphin:=\'海豚\';\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SELECT LENGTH(@dolphin), CHAR_LENGTH(@dolphin);\n+------------------+-----------------------+\n| LENGTH(@dolphin) | CHAR_LENGTH(@dolphin) |\n+------------------+-----------------------+\n|                6 |                     2 |\n+------------------+-----------------------+\n1 row in set (0.00 sec)\n\nCHAR_LENGTH() returns NULL if str is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(186,'CHARACTER_LENGTH',15,'Syntax:\nCHARACTER_LENGTH(str)\n\nCHARACTER_LENGTH() is a synonym for CHAR_LENGTH().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(187,'CONCAT',15,'Syntax:\nCONCAT(str1,str2,...)\n\nReturns the string that results from concatenating the arguments. May\nhave one or more arguments. If all arguments are nonbinary strings, the\nresult is a nonbinary string. If the arguments include any binary\nstrings, the result is a binary string. A numeric argument is converted\nto its equivalent nonbinary string form.\n\nCONCAT() returns NULL if any argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT CONCAT(\'My\', \'S\', \'QL\');\n        -> \'MySQL\'\nmysql> SELECT CONCAT(\'My\', NULL, \'QL\');\n        -> NULL\nmysql> SELECT CONCAT(14.3);\n        -> \'14.3\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(188,'CONCAT_WS',15,'Syntax:\nCONCAT_WS(separator,str1,str2,...)\n\nCONCAT_WS() stands for Concatenate With Separator and is a special form\nof CONCAT(). The first argument is the separator for the rest of the\narguments. The separator is added between the strings to be\nconcatenated. The separator can be a string, as can the rest of the\narguments. If the separator is NULL, the result is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT CONCAT_WS(\',\',\'First name\',\'Second name\',\'Last Name\');\n        -> \'First name,Second name,Last Name\'\nmysql> SELECT CONCAT_WS(\',\',\'First name\',NULL,\'Last Name\');\n        -> \'First name,Last Name\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(189,'ELT',15,'Syntax:\nELT(N,str1,str2,str3,...)\n\nELT() returns the Nth element of the list of strings: str1 if N = 1,\nstr2 if N = 2, and so on. Returns NULL if N is less than 1, greater\nthan the number of arguments, or NULL. ELT() is the complement of\nFIELD().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT ELT(1, \'Aa\', \'Bb\', \'Cc\', \'Dd\');\n        -> \'Aa\'\nmysql> SELECT ELT(4, \'Aa\', \'Bb\', \'Cc\', \'Dd\');\n        -> \'Dd\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(190,'EXPORT_SET',15,'Syntax:\nEXPORT_SET(bits,on,off[,separator[,number_of_bits]])\n\nReturns a string such that for every bit set in the value bits, you get\nan on string and for every bit not set in the value, you get an off\nstring. Bits in bits are examined from right to left (from low-order to\nhigh-order bits). Strings are added to the result from left to right,\nseparated by the separator string (the default being the comma\ncharacter ,). The number of bits examined is given by number_of_bits,\nwhich has a default of 64 if not specified. number_of_bits is silently\nclipped to 64 if larger than 64. It is treated as an unsigned integer,\nso a value of −1 is effectively the same as 64.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT EXPORT_SET(5,\'Y\',\'N\',\',\',4);\n        -> \'Y,N,Y,N\'\nmysql> SELECT EXPORT_SET(6,\'1\',\'0\',\',\',10);\n        -> \'0,1,1,0,0,0,0,0,0,0\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(191,'FIELD',15,'Syntax:\nFIELD(str,str1,str2,str3,...)\n\nReturns the index (position) of str in the str1, str2, str3, ... list.\nReturns 0 if str is not found.\n\nIf all arguments to FIELD() are strings, all arguments are compared as\nstrings. If all arguments are numbers, they are compared as numbers.\nOtherwise, the arguments are compared as double.\n\nIf str is NULL, the return value is 0 because NULL fails equality\ncomparison with any value. FIELD() is the complement of ELT().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT FIELD(\'Bb\', \'Aa\', \'Bb\', \'Cc\', \'Dd\', \'Ff\');\n        -> 2\nmysql> SELECT FIELD(\'Gg\', \'Aa\', \'Bb\', \'Cc\', \'Dd\', \'Ff\');\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(192,'FIND_IN_SET',15,'Syntax:\nFIND_IN_SET(str,strlist)\n\nReturns a value in the range of 1 to N if the string str is in the\nstring list strlist consisting of N substrings. A string list is a\nstring composed of substrings separated by , characters. If the first\nargument is a constant string and the second is a column of type SET,\nthe FIND_IN_SET() function is optimized to use bit arithmetic. Returns\n0 if str is not in strlist or if strlist is the empty string. Returns\nNULL if either argument is NULL. This function does not work properly\nif the first argument contains a comma (,) character.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT FIND_IN_SET(\'b\',\'a,b,c,d\');\n        -> 2\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(193,'FORMAT',15,'Syntax:\nFORMAT(X,D[,locale])\n\nFormats the number X to a format like \'#,###,###.##\', rounded to D\ndecimal places, and returns the result as a string. If D is 0, the\nresult has no decimal point or fractional part. If X or D is NULL, the\nfunction returns NULL.\n\nThe optional third parameter enables a locale to be specified to be\nused for the result number\'s decimal point, thousands separator, and\ngrouping between separators. Permissible locale values are the same as\nthe legal values for the lc_time_names system variable (see\nhttps://dev.mysql.com/doc/refman/8.0/en/locale-support.html). If the\nlocale is NULL or not specified, the default locale is \'en_US\'.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT FORMAT(12332.123456, 4);\n        -> \'12,332.1235\'\nmysql> SELECT FORMAT(12332.1,4);\n        -> \'12,332.1000\'\nmysql> SELECT FORMAT(12332.2,0);\n        -> \'12,332\'\nmysql> SELECT FORMAT(12332.2,2,\'de_DE\');\n        -> \'12.332,20\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(194,'FROM_BASE64',15,'Syntax:\nFROM_BASE64(str)\n\nTakes a string encoded with the base-64 encoded rules used by\nTO_BASE64() and returns the decoded result as a binary string. The\nresult is NULL if the argument is NULL or not a valid base-64 string.\nSee the description of TO_BASE64() for details about the encoding and\ndecoding rules.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT TO_BASE64(\'abc\'), FROM_BASE64(TO_BASE64(\'abc\'));\n        -> \'JWJj\', \'abc\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(195,'HEX',15,'Syntax:\nHEX(str), HEX(N)\n\nFor a string argument str, HEX() returns a hexadecimal string\nrepresentation of str where each byte of each character in str is\nconverted to two hexadecimal digits. (Multibyte characters therefore\nbecome more than two digits.) The inverse of this operation is\nperformed by the UNHEX() function.\n\nFor a numeric argument N, HEX() returns a hexadecimal string\nrepresentation of the value of N treated as a longlong (BIGINT) number.\nThis is equivalent to CONV(N,10,16). The inverse of this operation is\nperformed by CONV(HEX(N),16,10).\n\nFor a NULL argument, this function returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT X\'616263\', HEX(\'abc\'), UNHEX(HEX(\'abc\'));\n        -> \'abc\', 616263, \'abc\'\nmysql> SELECT HEX(255), CONV(HEX(255),16,10);\n        -> \'FF\', 255\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(196,'INSERT FUNCTION',15,'Syntax:\nINSERT(str,pos,len,newstr)\n\nReturns the string str, with the substring beginning at position pos\nand len characters long replaced by the string newstr. Returns the\noriginal string if pos is not within the length of the string. Replaces\nthe rest of the string from position pos if len is not within the\nlength of the rest of the string. Returns NULL if any argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT INSERT(\'Quadratic\', 3, 4, \'What\');\n        -> \'QuWhattic\'\nmysql> SELECT INSERT(\'Quadratic\', -1, 4, \'What\');\n        -> \'Quadratic\'\nmysql> SELECT INSERT(\'Quadratic\', 3, 100, \'What\');\n        -> \'QuWhat\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(197,'INSTR',15,'Syntax:\nINSTR(str,substr)\n\nReturns the position of the first occurrence of substring substr in\nstring str. This is the same as the two-argument form of LOCATE(),\nexcept that the order of the arguments is reversed.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT INSTR(\'foobarbar\', \'bar\');\n        -> 4\nmysql> SELECT INSTR(\'xbar\', \'foobar\');\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(198,'LCASE',15,'Syntax:\nLCASE(str)\n\nLCASE() is a synonym for LOWER().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(199,'LEFT',15,'Syntax:\nLEFT(str,len)\n\nReturns the leftmost len characters from the string str, or NULL if any\nargument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT LEFT(\'foobarbar\', 5);\n        -> \'fooba\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(200,'LENGTH',15,'Syntax:\nLENGTH(str)\n\nReturns the length of the string str, measured in bytes. A multibyte\ncharacter counts as multiple bytes. This means that for a string\ncontaining five 2-byte characters, LENGTH() returns 10, whereas\nCHAR_LENGTH() returns 5. Returns NULL if str is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT LENGTH(\'text\');\n        -> 4\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(201,'LOAD_FILE',15,'Syntax:\nLOAD_FILE(file_name)\n\nReads the file and returns the file contents as a string. To use this\nfunction, the file must be located on the server host, you must specify\nthe full path name to the file, and you must have the FILE privilege.\nThe file must be readable by the server and its size less than\nmax_allowed_packet bytes. If the secure_file_priv system variable is\nset to a nonempty directory name, the file to be loaded must be located\nin that directory. (Prior to MySQL 8.0.17, the file must be readable by\nall, not just readable by the server.)\n\nIf the file does not exist or cannot be read because one of the\npreceding conditions is not satisfied, the function returns NULL.\n\nThe character_set_filesystem system variable controls interpretation of\nfile names that are given as literal strings.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> UPDATE t\n            SET blob_col=LOAD_FILE(\'/tmp/picture\')\n            WHERE id=1;\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(202,'LOCATE',15,'Syntax:\nLOCATE(substr,str), LOCATE(substr,str,pos)\n\nThe first syntax returns the position of the first occurrence of\nsubstring substr in string str. The second syntax returns the position\nof the first occurrence of substring substr in string str, starting at\nposition pos. Returns 0 if substr is not in str. Returns NULL if any\nargument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT LOCATE(\'bar\', \'foobarbar\');\n        -> 4\nmysql> SELECT LOCATE(\'xbar\', \'foobar\');\n        -> 0\nmysql> SELECT LOCATE(\'bar\', \'foobarbar\', 5);\n        -> 7\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(203,'LOWER',15,'Syntax:\nLOWER(str)\n\nReturns the string str with all characters changed to lowercase\naccording to the current character set mapping, or NULL if str is NULL.\nThe default character set is utf8mb4.\n\nmysql> SELECT LOWER(\'QUADRATICALLY\');\n        -> \'quadratically\'\n\nLOWER() (and UPPER()) are ineffective when applied to binary strings\n(BINARY, VARBINARY, BLOB). To perform lettercase conversion of a binary\nstring, first convert it to a nonbinary string using a character set\nappropriate for the data stored in the string:\n\nmysql> SET @str = BINARY \'New York\';\nmysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4));\n+-------------+------------------------------------+\n| LOWER(@str) | LOWER(CONVERT(@str USING utf8mb4)) |\n+-------------+------------------------------------+\n| New York    | new york                           |\n+-------------+------------------------------------+\n\nFor collations of Unicode character sets, LOWER() and UPPER() work\naccording to the Unicode Collation Algorithm (UCA) version in the\ncollation name, if there is one, and UCA 4.0.0 if no version is\nspecified. For example, utf8mb4_0900_ai_ci and utf8mb3_unicode_520_ci\nwork according to UCA 9.0.0 and 5.2.0, respectively, whereas\nutf8mb3_unicode_ci works according to UCA 4.0.0. See\nhttps://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(204,'LPAD',15,'Syntax:\nLPAD(str,len,padstr)\n\nReturns the string str, left-padded with the string padstr to a length\nof len characters. If str is longer than len, the return value is\nshortened to len characters.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT LPAD(\'hi\',4,\'??\');\n        -> \'??hi\'\nmysql> SELECT LPAD(\'hi\',1,\'??\');\n        -> \'h\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(205,'LTRIM',15,'Syntax:\nLTRIM(str)\n\nReturns the string str with leading space characters removed. Returns\nNULL if str is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT LTRIM(\'  barbar\');\n        -> \'barbar\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(206,'MAKE_SET',15,'Syntax:\nMAKE_SET(bits,str1,str2,...)\n\nReturns a set value (a string containing substrings separated by ,\ncharacters) consisting of the strings that have the corresponding bit\nin bits set. str1 corresponds to bit 0, str2 to bit 1, and so on. NULL\nvalues in str1, str2, ... are not appended to the result.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT MAKE_SET(1,\'a\',\'b\',\'c\');\n        -> \'a\'\nmysql> SELECT MAKE_SET(1 | 4,\'hello\',\'nice\',\'world\');\n        -> \'hello,world\'\nmysql> SELECT MAKE_SET(1 | 4,\'hello\',\'nice\',NULL,\'world\');\n        -> \'hello\'\nmysql> SELECT MAKE_SET(0,\'a\',\'b\',\'c\');\n        -> \'\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(207,'MID',15,'Syntax:\nMID(str,pos,len)\n\nMID(str,pos,len) is a synonym for SUBSTRING(str,pos,len).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(208,'OCT',15,'Syntax:\nOCT(N)\n\nReturns a string representation of the octal value of N, where N is a\nlonglong (BIGINT) number. This is equivalent to CONV(N,10,8). Returns\nNULL if N is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT OCT(12);\n        -> \'14\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(209,'OCTET_LENGTH',15,'Syntax:\nOCTET_LENGTH(str)\n\nOCTET_LENGTH() is a synonym for LENGTH().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(210,'ORD',15,'Syntax:\nORD(str)\n\nIf the leftmost character of the string str is a multibyte character,\nreturns the code for that character, calculated from the numeric values\nof its constituent bytes using this formula:\n\n  (1st byte code)\n+ (2nd byte code * 256)\n+ (3rd byte code * 256^2) ...\n\nIf the leftmost character is not a multibyte character, ORD() returns\nthe same value as the ASCII() function. The function returns NULL if\nstr is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT ORD(\'2\');\n        -> 50\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(211,'POSITION',15,'Syntax:\nPOSITION(substr IN str)\n\nPOSITION(substr IN str) is a synonym for LOCATE(substr,str).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(212,'QUOTE',15,'Syntax:\nQUOTE(str)\n\nQuotes a string to produce a result that can be used as a properly\nescaped data value in an SQL statement. The string is returned enclosed\nby single quotation marks and with each instance of backslash (\\),\nsingle quote (\'), ASCII NUL, and Control+Z preceded by a backslash. If\nthe argument is NULL, the return value is the word \"NULL\" without\nenclosing single quotation marks.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT QUOTE(\'Don\\\'t!\');\n        -> \'Don\\\'t!\'\nmysql> SELECT QUOTE(NULL);\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(213,'REPEAT FUNCTION',15,'Syntax:\nREPEAT(str,count)\n\nReturns a string consisting of the string str repeated count times. If\ncount is less than 1, returns an empty string. Returns NULL if str or\ncount is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT REPEAT(\'MySQL\', 3);\n        -> \'MySQLMySQLMySQL\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(214,'REPLACE FUNCTION',15,'Syntax:\nREPLACE(str,from_str,to_str)\n\nReturns the string str with all occurrences of the string from_str\nreplaced by the string to_str. REPLACE() performs a case-sensitive\nmatch when searching for from_str.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT REPLACE(\'www.mysql.com\', \'w\', \'Ww\');\n        -> \'WwWwWw.mysql.com\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(215,'REVERSE',15,'Syntax:\nREVERSE(str)\n\nReturns the string str with the order of the characters reversed, or\nNULL if str is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT REVERSE(\'abc\');\n        -> \'cba\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(216,'RIGHT',15,'Syntax:\nRIGHT(str,len)\n\nReturns the rightmost len characters from the string str, or NULL if\nany argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT RIGHT(\'foobarbar\', 4);\n        -> \'rbar\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(217,'RPAD',15,'Syntax:\nRPAD(str,len,padstr)\n\nReturns the string str, right-padded with the string padstr to a length\nof len characters. If str is longer than len, the return value is\nshortened to len characters. If str, padstr, or len is NULL, the\nfunction returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT RPAD(\'hi\',5,\'?\');\n        -> \'hi???\'\nmysql> SELECT RPAD(\'hi\',1,\'?\');\n        -> \'h\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(218,'RTRIM',15,'Syntax:\nRTRIM(str)\n\nReturns the string str with trailing space characters removed.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT RTRIM(\'barbar   \');\n        -> \'barbar\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(219,'SOUNDEX',15,'Syntax:\nSOUNDEX(str)\n\nReturns a soundex string from str, or NULL if str is NULL. Two strings\nthat sound almost the same should have identical soundex strings. A\nstandard soundex string is four characters long, but the SOUNDEX()\nfunction returns an arbitrarily long string. You can use SUBSTRING() on\nthe result to get a standard soundex string. All nonalphabetic\ncharacters in str are ignored. All international alphabetic characters\noutside the A-Z range are treated as vowels.\n\n*Important*:\n\nWhen using SOUNDEX(), you should be aware of the following limitations:\n\no This function, as currently implemented, is intended to work well\n  with strings that are in the English language only. Strings in other\n  languages may not produce reliable results.\n\no This function is not guaranteed to provide consistent results with\n  strings that use multibyte character sets, including utf-8. See Bug\n  #22638 for more information.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT SOUNDEX(\'Hello\');\n        -> \'H400\'\nmysql> SELECT SOUNDEX(\'Quadratically\');\n        -> \'Q36324\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(220,'SOUNDS LIKE',15,'Syntax:\nexpr1 SOUNDS LIKE expr2\n\nThis is the same as SOUNDEX(expr1) = SOUNDEX(expr2).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(221,'SPACE',15,'Syntax:\nSPACE(N)\n\nReturns a string consisting of N space characters, or NULL if N is\nNULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT SPACE(6);\n        -> \'      \'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(222,'SUBSTR',15,'Syntax:\nSUBSTR(str,pos), SUBSTR(str FROM pos), SUBSTR(str,pos,len), SUBSTR(str\nFROM pos FOR len)\n\nSUBSTR() is a synonym for SUBSTRING().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(223,'SUBSTRING',15,'Syntax:\nSUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len),\nSUBSTRING(str FROM pos FOR len)\n\nThe forms without a len argument return a substring from string str\nstarting at position pos. The forms with a len argument return a\nsubstring len characters long from string str, starting at position\npos. The forms that use FROM are standard SQL syntax. It is also\npossible to use a negative value for pos. In this case, the beginning\nof the substring is pos characters from the end of the string, rather\nthan the beginning. A negative value may be used for pos in any of the\nforms of this function. A value of 0 for pos returns an empty string.\n\nFor all forms of SUBSTRING(), the position of the first character in\nthe string from which the substring is to be extracted is reckoned as\n1.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT SUBSTRING(\'Quadratically\',5);\n        -> \'ratically\'\nmysql> SELECT SUBSTRING(\'foobarbar\' FROM 4);\n        -> \'barbar\'\nmysql> SELECT SUBSTRING(\'Quadratically\',5,6);\n        -> \'ratica\'\nmysql> SELECT SUBSTRING(\'Sakila\', -3);\n        -> \'ila\'\nmysql> SELECT SUBSTRING(\'Sakila\', -5, 3);\n        -> \'aki\'\nmysql> SELECT SUBSTRING(\'Sakila\' FROM -4 FOR 2);\n        -> \'ki\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(224,'SUBSTRING_INDEX',15,'Syntax:\nSUBSTRING_INDEX(str,delim,count)\n\nReturns the substring from string str before count occurrences of the\ndelimiter delim. If count is positive, everything to the left of the\nfinal delimiter (counting from the left) is returned. If count is\nnegative, everything to the right of the final delimiter (counting from\nthe right) is returned. SUBSTRING_INDEX() performs a case-sensitive\nmatch when searching for delim.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT SUBSTRING_INDEX(\'www.mysql.com\', \'.\', 2);\n        -> \'www.mysql\'\nmysql> SELECT SUBSTRING_INDEX(\'www.mysql.com\', \'.\', -2);\n        -> \'mysql.com\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(225,'TO_BASE64',15,'Syntax:\nTO_BASE64(str)\n\nConverts the string argument to base-64 encoded form and returns the\nresult as a character string with the connection character set and\ncollation. If the argument is not a string, it is converted to a string\nbefore conversion takes place. The result is NULL if the argument is\nNULL. Base-64 encoded strings can be decoded using the FROM_BASE64()\nfunction.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT TO_BASE64(\'abc\'), FROM_BASE64(TO_BASE64(\'abc\'));\n        -> \'JWJj\', \'abc\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(226,'TRIM',15,'Syntax:\nTRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr\nFROM] str)\n\nReturns the string str with all remstr prefixes or suffixes removed. If\nnone of the specifiers BOTH, LEADING, or TRAILING is given, BOTH is\nassumed. remstr is optional and, if not specified, spaces are removed.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT TRIM(\'  bar   \');\n        -> \'bar\'\nmysql> SELECT TRIM(LEADING \'x\' FROM \'xxxbarxxx\');\n        -> \'barxxx\'\nmysql> SELECT TRIM(BOTH \'x\' FROM \'xxxbarxxx\');\n        -> \'bar\'\nmysql> SELECT TRIM(TRAILING \'xyz\' FROM \'barxxyz\');\n        -> \'barx\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(227,'UCASE',15,'Syntax:\nUCASE(str)\n\nUCASE() is a synonym for UPPER().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(228,'UNHEX',15,'Syntax:\nUNHEX(str)\n\nFor a string argument str, UNHEX(str) interprets each pair of\ncharacters in the argument as a hexadecimal number and converts it to\nthe byte represented by the number. The return value is a binary\nstring.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','mysql> SELECT UNHEX(\'4D7953514C\');\n        -> \'MySQL\'\nmysql> SELECT X\'4D7953514C\';\n        -> \'MySQL\'\nmysql> SELECT UNHEX(HEX(\'string\'));\n        -> \'string\'\nmysql> SELECT HEX(UNHEX(\'1267\'));\n        -> \'1267\'\n','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(229,'UPPER',15,'Syntax:\nUPPER(str)\n\nReturns the string str with all characters changed to uppercase\naccording to the current character set mapping, or NULL if str is NULL.\nThe default character set is utf8mb4.\n\nmysql> SELECT UPPER(\'Hej\');\n        -> \'HEJ\'\n\nSee the description of LOWER() for information that also applies to\nUPPER(). This included information about how to perform lettercase\nconversion of binary strings (BINARY, VARBINARY, BLOB) for which these\nfunctions are ineffective, and information about case folding for\nUnicode character sets.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(230,'WEIGHT_STRING',15,'Syntax:\nWEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags])\n\nThis function returns the weight string for the input string. The\nreturn value is a binary string that represents the comparison and\nsorting value of the string, or NULL if the argument is NULL. It has\nthese properties:\n\no If WEIGHT_STRING(str1) = WEIGHT_STRING(str2), then str1 = str2 (str1\n  and str2 are considered equal)\n\no If WEIGHT_STRING(str1) < WEIGHT_STRING(str2), then str1 < str2 (str1\n  sorts before str2)\n\nWEIGHT_STRING() is a debugging function intended for internal use. Its\nbehavior can change without notice between MySQL versions. It can be\nused for testing and debugging of collations, especially if you are\nadding a new collation. See\nhttps://dev.mysql.com/doc/refman/8.0/en/adding-collation.html.\n\nThis list briefly summarizes the arguments. More details are given in\nthe discussion following the list.\n\no str: The input string expression.\n\no AS clause: Optional; cast the input string to a given type and\n  length.\n\no flags: Optional; unused.\n\nThe input string, str, is a string expression. If the input is a\nnonbinary (character) string such as a CHAR, VARCHAR, or TEXT value,\nthe return value contains the collation weights for the string. If the\ninput is a binary (byte) string such as a BINARY, VARBINARY, or BLOB\nvalue, the return value is the same as the input (the weight for each\nbyte in a binary string is the byte value). If the input is NULL,\nWEIGHT_STRING() returns NULL.\n\nExamples:\n\nmysql> SET @s = _utf8mb4 \'AB\' COLLATE utf8mb4_0900_ai_ci;\nmysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));\n+------+---------+------------------------+\n| @s   | HEX(@s) | HEX(WEIGHT_STRING(@s)) |\n+------+---------+------------------------+\n| AB   | 4142    | 1C471C60               |\n+------+---------+------------------------+\n\nmysql> SET @s = _utf8mb4 \'ab\' COLLATE utf8mb4_0900_ai_ci;\nmysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));\n+------+---------+------------------------+\n| @s   | HEX(@s) | HEX(WEIGHT_STRING(@s)) |\n+------+---------+------------------------+\n| ab   | 6162    | 1C471C60               |\n+------+---------+------------------------+\n\nmysql> SET @s = CAST(\'AB\' AS BINARY);\nmysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));\n+------+---------+------------------------+\n| @s   | HEX(@s) | HEX(WEIGHT_STRING(@s)) |\n+------+---------+------------------------+\n| AB   | 4142    | 4142                   |\n+------+---------+------------------------+\n\nmysql> SET @s = CAST(\'ab\' AS BINARY);\nmysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));\n+------+---------+------------------------+\n| @s   | HEX(@s) | HEX(WEIGHT_STRING(@s)) |\n+------+---------+------------------------+\n| ab   | 6162    | 6162                   |\n+------+---------+------------------------+\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-functions.html'),(231,'LIKE',15,'Syntax:\nexpr LIKE pat [ESCAPE \'escape_char\']\n\nPattern matching using an SQL pattern. Returns 1 (TRUE) or 0 (FALSE).\nIf either expr or pat is NULL, the result is NULL.\n\nThe pattern need not be a literal string. For example, it can be\nspecified as a string expression or table column. In the latter case,\nthe column must be defined as one of the MySQL string types (see\nhttps://dev.mysql.com/doc/refman/8.0/en/string-types.html).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html\n\n','mysql> SELECT \'David!\' LIKE \'David_\';\n        -> 1\nmysql> SELECT \'David!\' LIKE \'%D%v%\';\n        -> 1\n','https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html'),(232,'NOT LIKE',15,'Syntax:\nexpr NOT LIKE pat [ESCAPE \'escape_char\']\n\nThis is the same as NOT (expr LIKE pat [ESCAPE \'escape_char\']).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html'),(233,'STRCMP',15,'Syntax:\nSTRCMP(expr1,expr2)\n\nSTRCMP() returns 0 if the strings are the same, -1 if the first\nargument is smaller than the second according to the current sort\norder, and NULL if either argument is NULL. It returns 1 otherwise.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html\n\n','mysql> SELECT STRCMP(\'text\', \'text2\');\n        -> -1\nmysql> SELECT STRCMP(\'text2\', \'text\');\n        -> 1\nmysql> SELECT STRCMP(\'text\', \'text\');\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html'),(234,'NOT REGEXP',15,'Syntax:\nexpr NOT REGEXP pat, expr NOT RLIKE pat\n\nThis is the same as NOT (expr REGEXP pat).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/regexp.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/regexp.html'),(235,'REGEXP',15,'Syntax:\nexpr REGEXP pat, expr RLIKE pat\n\nReturns 1 if the string expr matches the regular expression specified\nby the pattern pat, 0 otherwise. If expr or pat is NULL, the return\nvalue is NULL.\n\nREGEXP and RLIKE are synonyms for REGEXP_LIKE().\n\nFor additional information about how matching occurs, see the\ndescription for REGEXP_LIKE().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/regexp.html\n\n','mysql> SELECT \'Michael!\' REGEXP \'.*\';\n+------------------------+\n| \'Michael!\' REGEXP \'.*\' |\n+------------------------+\n|                      1 |\n+------------------------+\nmysql> SELECT \'new*\\n*line\' REGEXP \'new\\\\*.\\\\*line\';\n+---------------------------------------+\n| \'new*\\n*line\' REGEXP \'new\\\\*.\\\\*line\' |\n+---------------------------------------+\n|                                     0 |\n+---------------------------------------+\nmysql> SELECT \'a\' REGEXP \'^[a-d]\';\n+---------------------+\n| \'a\' REGEXP \'^[a-d]\' |\n+---------------------+\n|                   1 |\n+---------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/regexp.html'),(236,'REGEXP_INSTR',15,'REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[,\nmatch_type]]]])\n\nReturns the starting index of the substring of the string expr that\nmatches the regular expression specified by the pattern pat, 0 if there\nis no match. If expr or pat is NULL, the return value is NULL.\nCharacter indexes begin at 1.\n\nREGEXP_INSTR() takes these optional arguments:\n\no pos: The position in expr at which to start the search. If omitted,\n  the default is 1.\n\no occurrence: Which occurrence of a match to search for. If omitted,\n  the default is 1.\n\no return_option: Which type of position to return. If this value is 0,\n  REGEXP_INSTR() returns the position of the matched substring\'s first\n  character. If this value is 1, REGEXP_INSTR() returns the position\n  following the matched substring. If omitted, the default is 0.\n\no match_type: A string that specifies how to perform matching. The\n  meaning is as described for REGEXP_LIKE().\n\nFor additional information about how matching occurs, see the\ndescription for REGEXP_LIKE().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/regexp.html\n\n','mysql> SELECT REGEXP_INSTR(\'dog cat dog\', \'dog\');\n+------------------------------------+\n| REGEXP_INSTR(\'dog cat dog\', \'dog\') |\n+------------------------------------+\n|                                  1 |\n+------------------------------------+\nmysql> SELECT REGEXP_INSTR(\'dog cat dog\', \'dog\', 2);\n+---------------------------------------+\n| REGEXP_INSTR(\'dog cat dog\', \'dog\', 2) |\n+---------------------------------------+\n|                                     9 |\n+---------------------------------------+\nmysql> SELECT REGEXP_INSTR(\'aa aaa aaaa\', \'a{2}\');\n+-------------------------------------+\n| REGEXP_INSTR(\'aa aaa aaaa\', \'a{2}\') |\n+-------------------------------------+\n|                                   1 |\n+-------------------------------------+\nmysql> SELECT REGEXP_INSTR(\'aa aaa aaaa\', \'a{4}\');\n+-------------------------------------+\n| REGEXP_INSTR(\'aa aaa aaaa\', \'a{4}\') |\n+-------------------------------------+\n|                                   8 |\n+-------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/regexp.html'),(237,'REGEXP_LIKE',15,'REGEXP_LIKE(expr, pat[, match_type])\n\nReturns 1 if the string expr matches the regular expression specified\nby the pattern pat, 0 otherwise. If expr or pat is NULL, the return\nvalue is NULL.\n\nThe pattern can be an extended regular expression, the syntax for which\nis discussed in\nhttps://dev.mysql.com/doc/refman/8.0/en/regexp.html#regexp-syntax. The\npattern need not be a literal string. For example, it can be specified\nas a string expression or table column.\n\nThe optional match_type argument is a string that may contain any or\nall the following characters specifying how to perform matching:\n\no c: Case-sensitive matching.\n\no i: Case-insensitive matching.\n\no m: Multiple-line mode. Recognize line terminators within the string.\n  The default behavior is to match line terminators only at the start\n  and end of the string expression.\n\no n: The . character matches line terminators. The default is for .\n  matching to stop at the end of a line.\n\no u: Unix-only line endings. Only the newline character is recognized\n  as a line ending by the ., ^, and $ match operators.\n\nIf characters specifying contradictory options are specified within\nmatch_type, the rightmost one takes precedence.\n\nBy default, regular expression operations use the character set and\ncollation of the expr and pat arguments when deciding the type of a\ncharacter and performing the comparison. If the arguments have\ndifferent character sets or collations, coercibility rules apply as\ndescribed in\nhttps://dev.mysql.com/doc/refman/8.0/en/charset-collation-coercibility.\nhtml. Arguments may be specified with explicit collation indicators to\nchange comparison behavior.\n\nmysql> SELECT REGEXP_LIKE(\'CamelCase\', \'CAMELCASE\');\n+---------------------------------------+\n| REGEXP_LIKE(\'CamelCase\', \'CAMELCASE\') |\n+---------------------------------------+\n|                                     1 |\n+---------------------------------------+\nmysql> SELECT REGEXP_LIKE(\'CamelCase\', \'CAMELCASE\' COLLATE utf8mb4_0900_as_cs);\n+------------------------------------------------------------------+\n| REGEXP_LIKE(\'CamelCase\', \'CAMELCASE\' COLLATE utf8mb4_0900_as_cs) |\n+------------------------------------------------------------------+\n|                                                                0 |\n+------------------------------------------------------------------+\n\nmatch_type may be specified with the c or i characters to override the\ndefault case sensitivity. Exception: If either argument is a binary\nstring, the arguments are handled in case-sensitive fashion as binary\nstrings, even if match_type contains the i character.\n\n*Note*:\n\nMySQL uses C escape syntax in strings (for example, \\n to represent the\nnewline character). If you want your expr or pat argument to contain a\nliteral \\, you must double it. (Unless the NO_BACKSLASH_ESCAPES SQL\nmode is enabled, in which case no escape character is used.)\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/regexp.html\n\n','mysql> SELECT REGEXP_LIKE(\'Michael!\', \'.*\');\n+-------------------------------+\n| REGEXP_LIKE(\'Michael!\', \'.*\') |\n+-------------------------------+\n|                             1 |\n+-------------------------------+\nmysql> SELECT REGEXP_LIKE(\'new*\\n*line\', \'new\\\\*.\\\\*line\');\n+----------------------------------------------+\n| REGEXP_LIKE(\'new*\\n*line\', \'new\\\\*.\\\\*line\') |\n+----------------------------------------------+\n|                                            0 |\n+----------------------------------------------+\nmysql> SELECT REGEXP_LIKE(\'a\', \'^[a-d]\');\n+----------------------------+\n| REGEXP_LIKE(\'a\', \'^[a-d]\') |\n+----------------------------+\n|                          1 |\n+----------------------------+\n\nmysql> SELECT REGEXP_LIKE(\'abc\', \'ABC\');\n+---------------------------+\n| REGEXP_LIKE(\'abc\', \'ABC\') |\n+---------------------------+\n|                         1 |\n+---------------------------+\nmysql> SELECT REGEXP_LIKE(\'abc\', \'ABC\', \'c\');\n+--------------------------------+\n| REGEXP_LIKE(\'abc\', \'ABC\', \'c\') |\n+--------------------------------+\n|                              0 |\n+--------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/regexp.html'),(238,'REGEXP_REPLACE',15,'REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])\n\nReplaces occurrences in the string expr that match the regular\nexpression specified by the pattern pat with the replacement string\nrepl, and returns the resulting string. If expr, pat, or repl is NULL,\nthe return value is NULL.\n\nREGEXP_REPLACE() takes these optional arguments:\n\no pos: The position in expr at which to start the search. If omitted,\n  the default is 1.\n\no occurrence: Which occurrence of a match to replace. If omitted, the\n  default is 0 (which means \"replace all occurrences\").\n\no match_type: A string that specifies how to perform matching. The\n  meaning is as described for REGEXP_LIKE().\n\nPrior to MySQL 8.0.17, the result returned by this function used the\nUTF-16 character set; in MySQL 8.0.17 and later, the character set and\ncollation of the expression searched for matches is used. (Bug #94203,\nBug #29308212)\n\nFor additional information about how matching occurs, see the\ndescription for REGEXP_LIKE().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/regexp.html\n\n','mysql> SELECT REGEXP_REPLACE(\'a b c\', \'b\', \'X\');\n+-----------------------------------+\n| REGEXP_REPLACE(\'a b c\', \'b\', \'X\') |\n+-----------------------------------+\n| a X c                             |\n+-----------------------------------+\nmysql> SELECT REGEXP_REPLACE(\'abc def ghi\', \'[a-z]+\', \'X\', 1, 3);\n+----------------------------------------------------+\n| REGEXP_REPLACE(\'abc def ghi\', \'[a-z]+\', \'X\', 1, 3) |\n+----------------------------------------------------+\n| abc def X                                          |\n+----------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/regexp.html'),(239,'REGEXP_SUBSTR',15,'REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])\n\nReturns the substring of the string expr that matches the regular\nexpression specified by the pattern pat, NULL if there is no match. If\nexpr or pat is NULL, the return value is NULL.\n\nREGEXP_SUBSTR() takes these optional arguments:\n\no pos: The position in expr at which to start the search. If omitted,\n  the default is 1.\n\no occurrence: Which occurrence of a match to search for. If omitted,\n  the default is 1.\n\no match_type: A string that specifies how to perform matching. The\n  meaning is as described for REGEXP_LIKE().\n\nPrior to MySQL 8.0.17, the result returned by this function used the\nUTF-16 character set; in MySQL 8.0.17 and later, the character set and\ncollation of the expression searched for matches is used. (Bug #94203,\nBug #29308212)\n\nFor additional information about how matching occurs, see the\ndescription for REGEXP_LIKE().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/regexp.html\n\n','mysql> SELECT REGEXP_SUBSTR(\'abc def ghi\', \'[a-z]+\');\n+----------------------------------------+\n| REGEXP_SUBSTR(\'abc def ghi\', \'[a-z]+\') |\n+----------------------------------------+\n| abc                                    |\n+----------------------------------------+\nmysql> SELECT REGEXP_SUBSTR(\'abc def ghi\', \'[a-z]+\', 1, 3);\n+----------------------------------------------+\n| REGEXP_SUBSTR(\'abc def ghi\', \'[a-z]+\', 1, 3) |\n+----------------------------------------------+\n| ghi                                          |\n+----------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/regexp.html'),(240,'MATCH AGAINST',15,'Syntax:\nMATCH (col1,col2,...) AGAINST (expr [search_modifier])\n\nMySQL has support for full-text indexing and searching:\n\no A full-text index in MySQL is an index of type FULLTEXT.\n\no Full-text indexes can be used only with InnoDB or MyISAM tables, and\n  can be created only for CHAR, VARCHAR, or TEXT columns.\n\no MySQL provides a built-in full-text ngram parser that supports\n  Chinese, Japanese, and Korean (CJK), and an installable MeCab\n  full-text parser plugin for Japanese. Parsing differences are\n  outlined in\n  https://dev.mysql.com/doc/refman/8.0/en/fulltext-search-ngram.html,\n  and\n  https://dev.mysql.com/doc/refman/8.0/en/fulltext-search-mecab.html.\n\no A FULLTEXT index definition can be given in the CREATE TABLE\n  statement when a table is created, or added later using ALTER TABLE\n  or CREATE INDEX.\n\no For large data sets, it is much faster to load your data into a table\n  that has no FULLTEXT index and then create the index after that, than\n  to load data into a table that has an existing FULLTEXT index.\n\nFull-text searching is performed using MATCH() AGAINST() syntax.\nMATCH() takes a comma-separated list that names the columns to be\nsearched. AGAINST takes a string to search for, and an optional\nmodifier that indicates what type of search to perform. The search\nstring must be a string value that is constant during query evaluation.\nThis rules out, for example, a table column because that can differ for\neach row.\n\nPreviously, MySQL permitted the use of a rollup column with MATCH(),\nbut queries employing this construct performed poorly and with\nunreliable results. (This is due to the fact that MATCH() is not\nimplemented as a function of its arguments, but rather as a function of\nthe row ID of the current row in the underlying scan of the base\ntable.) As of MySQL 8.0.28, MySQL no longer allows such queries; more\nspecifically, any query matching all of the criteria listed here is\nrejected with ER_FULLTEXT_WITH_ROLLUP\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_fulltext_with_rollup):\n\no MATCH() appears in the SELECT list, GROUP BY clause, HAVING clause,\n  or ORDER BY clause of a query block.\n\no The query block contains a GROUP BY ... WITH ROLLUP clause.\n\no The argument of the call to the MATCH() function is one of the\n  grouping columns.\n\nSome examples of such queries are shown here:\n\n# MATCH() in SELECT list...\nSELECT MATCH (a) AGAINST (\'abc\') FROM t GROUP BY a WITH ROLLUP;\nSELECT 1 FROM t GROUP BY a, MATCH (a) AGAINST (\'abc\') WITH ROLLUP;\n\n# ...in HAVING clause...\nSELECT 1 FROM t GROUP BY a WITH ROLLUP HAVING MATCH (a) AGAINST (\'abc\');\n\n# ...and in ORDER BY clause\nSELECT 1 FROM t GROUP BY a WITH ROLLUP ORDER BY MATCH (a) AGAINST (\'abc\');\n\nThe use of MATCH() with a rollup column in the WHERE clause is\npermitted.\n\nThere are three types of full-text searches:\n\no A natural language search interprets the search string as a phrase in\n  natural human language (a phrase in free text). There are no special\n  operators, with the exception of double quote (\") characters. The\n  stopword list applies. For more information about stopword lists, see\n  https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html.\n\n  Full-text searches are natural language searches if the IN NATURAL\n  LANGUAGE MODE modifier is given or if no modifier is given. For more\n  information, see\n  https://dev.mysql.com/doc/refman/8.0/en/fulltext-natural-language.htm\n  l.\n\no A boolean search interprets the search string using the rules of a\n  special query language. The string contains the words to search for.\n  It can also contain operators that specify requirements such that a\n  word must be present or absent in matching rows, or that it should be\n  weighted higher or lower than usual. Certain common words (stopwords)\n  are omitted from the search index and do not match if present in the\n  search string. The IN BOOLEAN MODE modifier specifies a boolean\n  search. For more information, see\n  https://dev.mysql.com/doc/refman/8.0/en/fulltext-boolean.html.\n\no A query expansion search is a modification of a natural language\n  search. The search string is used to perform a natural language\n  search. Then words from the most relevant rows returned by the search\n  are added to the search string and the search is done again. The\n  query returns the rows from the second search. The IN NATURAL\n  LANGUAGE MODE WITH QUERY EXPANSION or WITH QUERY EXPANSION modifier\n  specifies a query expansion search. For more information, see\n  https://dev.mysql.com/doc/refman/8.0/en/fulltext-query-expansion.html\n  .\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html\n\n','mysql> SELECT id, body, MATCH (title,body)\n    ->   AGAINST (\'Security implications of running MySQL as root\'\n    ->   IN NATURAL LANGUAGE MODE) AS score\n    -> FROM articles\n    ->   WHERE MATCH (title,body) \n    ->   AGAINST(\'Security implications of running MySQL as root\'\n    ->   IN NATURAL LANGUAGE MODE);\n+----+-------------------------------------+-----------------+\n| id | body                                | score           |\n+----+-------------------------------------+-----------------+\n|  4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |\n|  6 | When configured properly, MySQL ... | 1.3114095926285 |\n+----+-------------------------------------+-----------------+\n2 rows in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html'),(241,'BINARY OPERATOR',16,'Syntax:\nBINARY expr\n\nThe BINARY operator converts the expression to a binary string (a\nstring that has the binary character set and binary collation). A\ncommon use for BINARY is to force a character string comparison to be\ndone byte by byte using numeric byte values rather than character by\ncharacter. The BINARY operator also causes trailing spaces in\ncomparisons to be significant. For information about the differences\nbetween the binary collation of the binary character set and the _bin\ncollations of nonbinary character sets, see\nhttps://dev.mysql.com/doc/refman/8.0/en/charset-binary-collations.html.\n\nThe BINARY operator is deprecated as of MySQL 8.0.27, and you should\nexpect its removal in a future version of MySQL. Use CAST(... AS\nBINARY) instead.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html\n\n','mysql> SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;\n        -> OK\nmysql> SELECT \'a\' = \'A\';\n        -> 1\nmysql> SELECT BINARY \'a\' = \'A\';\n        -> 0\nmysql> SELECT \'a\' = \'a \';\n        -> 1\nmysql> SELECT BINARY \'a\' = \'a \';\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html'),(242,'CAST',16,'Syntax:\nCAST(expr AS type [ARRAY])\n\nCAST(timestamp_value AT TIME ZONE timezone_specifier AS\nDATETIME[(precision)])\n\ntimezone_specifier: [INTERVAL] \'+00:00\' | \'UTC\'\n\nWith CAST(expr AS type syntax, the CAST() function takes an expression\nof any type and produces a result value of the specified type. This\noperation may also be expressed as CONVERT(expr, type), which is\nequivalent. If expr is NULL, CAST() returns NULL.\n\nThese type values are permitted:\n\no BINARY[(N)]\n\n  Produces a string with the VARBINARY data type, except that when the\n  expression expr is empty (zero length), the result type is BINARY(0).\n  If the optional length N is given, BINARY(N) causes the cast to use\n  no more than N bytes of the argument. Values shorter than N bytes are\n  padded with 0x00 bytes to a length of N. If the optional length N is\n  not given, MySQL calculates the maximum length from the expression.\n  If the supplied or calculated length is greater than an internal\n  threshold, the result type is BLOB. If the length is still too long,\n  the result type is LONGBLOB.\n\n  For a description of how casting to BINARY affects comparisons, see\n  https://dev.mysql.com/doc/refman/8.0/en/binary-varbinary.html.\n\no CHAR[(N)] [charset_info]\n\n  Produces a string with the VARCHAR data type, unless the expression\n  expr is empty (zero length), in which case the result type is\n  CHAR(0). If the optional length N is given, CHAR(N) causes the cast\n  to use no more than N characters of the argument. No padding occurs\n  for values shorter than N characters. If the optional length N is not\n  given, MySQL calculates the maximum length from the expression. If\n  the supplied or calculated length is greater than an internal\n  threshold, the result type is TEXT. If the length is still too long,\n  the result type is LONGTEXT.\n\n  With no charset_info clause, CHAR produces a string with the default\n  character set. To specify the character set explicitly, these\n  charset_info values are permitted:\n\n  o CHARACTER SET charset_name: Produces a string with the given\n    character set.\n\n  o ASCII: Shorthand for CHARACTER SET latin1.\n\n  o UNICODE: Shorthand for CHARACTER SET ucs2.\n\n  In all cases, the string has the character set default collation.\n\no DATE\n\n  Produces a DATE value.\n\no DATETIME[(M)]\n\n  Produces a DATETIME value. If the optional M value is given, it\n  specifies the fractional seconds precision.\n\no DECIMAL[(M[,D])]\n\n  Produces a DECIMAL value. If the optional M and D values are given,\n  they specify the maximum number of digits (the precision) and the\n  number of digits following the decimal point (the scale). If D is\n  omitted, 0 is assumed. If M is omitted, 10 is assumed.\n\no DOUBLE\n\n  Produces a DOUBLE result. Added in MySQL 8.0.17.\n\no FLOAT[(p)]\n\n  If the precision p is not specified, produces a result of type FLOAT.\n  If p is provided and 0 <= < p <= 24, the result is of type FLOAT. If\n  25 <= p <= 53, the result is of type DOUBLE. If p < 0 or p > 53, an\n  error is returned. Added in MySQL 8.0.17.\n\no JSON\n\n  Produces a JSON value. For details on the rules for conversion of\n  values between JSON and other types, see\n  https://dev.mysql.com/doc/refman/8.0/en/json.html#json-comparison.\n\no NCHAR[(N)]\n\n  Like CHAR, but produces a string with the national character set. See\n  https://dev.mysql.com/doc/refman/8.0/en/charset-national.html.\n\n  Unlike CHAR, NCHAR does not permit trailing character set information\n  to be specified.\n\no REAL\n\n  Produces a result of type REAL. This is actually FLOAT if the\n  REAL_AS_FLOAT SQL mode is enabled; otherwise the result is of type\n  DOUBLE.\n\no SIGNED [INTEGER]\n\n  Produces a signed BIGINT value.\n\no spatial_type\n\n  As of MySQL 8.0.24, CAST() and CONVERT() support casting geometry\n  values from one spatial type to another, for certain combinations of\n  spatial types. For details, see\n  https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#cast-spat\n  ial-types.\n\no TIME[(M)]\n\n  Produces a TIME value. If the optional M value is given, it specifies\n  the fractional seconds precision.\n\no UNSIGNED [INTEGER]\n\n  Produces an unsigned BIGINT value.\n\no YEAR\n\n  Produces a YEAR value. Added in MySQL 8.0.22. These rules govern\n  conversion to YEAR:\n\n  o For a four-digit number in the range 1901-2155 inclusive, or for a\n    string which can be interpreted as a four-digit number in this\n    range, return the corresponding YEAR value.\n\n  o For a number consisting of one or two digits, or for a string which\n    can be interpreted as such a number, return a YEAR value as\n    follows:\n\n    o If the number is in the range 1-69 inclusive, add 2000 and return\n      the sum.\n\n    o If the number is in the range 70-99 inclusive, add 1900 and\n      return the sum.\n\n  o For a string which evaluates to 0, return 2000.\n\n  o For the number 0, return 0.\n\n  o For a DATE, DATETIME, or TIMESTAMP value, return the YEAR portion\n    of the value. For a TIME value, return the current year.\n\n    If you do not specify the type of a TIME argument, you may get a\n    different result from what you expect, as shown here:\n\nmysql> SELECT CAST(\"11:35:00\" AS YEAR), CAST(TIME \"11:35:00\" AS YEAR);\n+--------------------------+-------------------------------+\n| CAST(\"11:35:00\" AS YEAR) | CAST(TIME \"11:35:00\" AS YEAR) |\n+--------------------------+-------------------------------+\n|                     2011 |                          2021 |\n+--------------------------+-------------------------------+\n\n  o If the argument is of type DECIMAL, DOUBLE, DECIMAL, or REAL, round\n    the value to the nearest integer, then attempt to cast the value to\n    YEAR using the rules for integer values, as shown here:\n\nmysql> SELECT CAST(1944.35 AS YEAR), CAST(1944.50 AS YEAR);\n+-----------------------+-----------------------+\n| CAST(1944.35 AS YEAR) | CAST(1944.50 AS YEAR) |\n+-----------------------+-----------------------+\n|                  1944 |                  1945 |\n+-----------------------+-----------------------+\n\nmysql> SELECT CAST(66.35 AS YEAR), CAST(66.50 AS YEAR);\n+---------------------+---------------------+\n| CAST(66.35 AS YEAR) | CAST(66.50 AS YEAR) |\n+---------------------+---------------------+\n|                2066 |                2067 |\n+---------------------+---------------------+\n\n  o An argument of type GEOMETRY cannot be converted to YEAR.\n\n  o For a value that cannot be successfully converted to YEAR, return\n    NULL.\n\n  A string value containing non-numeric characters which must be\n  truncated prior to conversion raises a warning, as shown here:\n\nmysql> SELECT CAST(\"1979aaa\" AS YEAR);\n+-------------------------+\n| CAST(\"1979aaa\" AS YEAR) |\n+-------------------------+\n|                    1979 |\n+-------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS;\n+---------+------+-------------------------------------------+\n| Level   | Code | Message                                   |\n+---------+------+-------------------------------------------+\n| Warning | 1292 | Truncated incorrect YEAR value: \'1979aaa\' |\n+---------+------+-------------------------------------------+\n\nIn MySQL 8.0.17 and higher, InnoDB allows the use of an additional\nARRAY keyword for creating a multi-valued index on a JSON array as part\nof CREATE INDEX, CREATE TABLE, and ALTER TABLE statements. ARRAY is not\nsupported except when used to create a multi-valued index in one of\nthese statements, in which case it is required. The column being\nindexed must be a column of type JSON. With ARRAY, the type following\nthe AS keyword may specify any of the types supported by CAST(), with\nthe exceptions of BINARY, JSON, and YEAR. For syntax information and\nexamples, as well as other relevant information, see\nhttps://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-\nmulti-valued.\n\n*Note*:\n\nCONVERT(), unlike CAST(), does not support multi-valued index creation\nor the ARRAY keyword.\n\nBeginning with MySQL 8.0.22, CAST() supports retrieval of a TIMESTAMP\nvalue as being in UTC, using the AT TIMEZONE operator. The only\nsupported time zone is UTC; this can be specified as either of \'+00:00\'\nor \'UTC\'. The only return type supported by this syntax is DATETIME,\nwith an optional precision specifier in the range of 0 to 6, inclusive.\n\nTIMESTAMP values that use timezone offsets are also supported.\n\nmysql> SELECT @@system_time_zone;\n+--------------------+\n| @@system_time_zone |\n+--------------------+\n| EDT                |\n+--------------------+\n1 row in set (0.00 sec)\n\nmysql> CREATE TABLE TZ (c TIMESTAMP);\nQuery OK, 0 rows affected (0.41 sec)\n\nmysql> INSERT INTO tz VALUES\n    ->     ROW(CURRENT_TIMESTAMP),\n    ->     ROW(\'2020-07-28 14:50:15+1:00\');\nQuery OK, 1 row affected (0.08 sec)\n\nmysql> TABLE tz;\n+---------------------+\n| c                   |\n+---------------------+\n| 2020-07-28 09:22:41 |\n| 2020-07-28 09:50:15 |\n+---------------------+\n2 rows in set (0.00 sec)\n\nmysql> SELECT CAST(c AT TIME ZONE \'+00:00\' AS DATETIME) AS u FROM tz;\n+---------------------+\n| u                   |\n+---------------------+\n| 2020-07-28 13:22:41 |\n| 2020-07-28 13:50:15 |\n+---------------------+\n2 rows in set (0.00 sec)\n\nmysql> SELECT CAST(c AT TIME ZONE \'UTC\' AS DATETIME(2)) AS u FROM tz;\n+------------------------+\n| u                      |\n+------------------------+\n| 2020-07-28 13:22:41.00 |\n| 2020-07-28 13:50:15.00 |\n+------------------------+\n2 rows in set (0.00 sec)\n\nIf you use \'UTC\' as the time zone specifier with this form of CAST(),\nand the server raises an error such as Unknown or incorrect time zone:\n\'UTC\', you may need to install the MySQL time zone tables (see\nhttps://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html#time-zon\ne-installation).\n\nAT TIME ZONE does not support the ARRAY keyword, and is not supported\nby the CONVERT() function.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html'),(243,'CONVERT',16,'Syntax:\nCONVERT(expr USING transcoding_name)\n\nCONVERT(expr,type)\n\nCONVERT(expr USING transcoding_name) is standard SQL syntax. The\nnon-USING form of CONVERT() is ODBC syntax. Regardless of the syntax\nused, the function returns NULL if expr is NULL.\n\nCONVERT(expr USING transcoding_name) converts data between different\ncharacter sets. In MySQL, transcoding names are the same as the\ncorresponding character set names. For example, this statement converts\nthe string \'abc\' in the default character set to the corresponding\nstring in the utf8mb4 character set:\n\nSELECT CONVERT(\'abc\' USING utf8mb4);\n\nCONVERT(expr, type) syntax (without USING) takes an expression and a\ntype value specifying a result type, and produces a result value of the\nspecified type. This operation may also be expressed as CAST(expr AS\ntype), which is equivalent. For more information, see the description\nof CAST().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html'),(244,'EXTRACTVALUE',17,'Syntax:\nExtractValue(xml_frag, xpath_expr)\n\nExtractValue() takes two string arguments, a fragment of XML markup\nxml_frag and an XPath expression xpath_expr (also known as a locator);\nit returns the text (CDATA) of the first text node which is a child of\nthe element or elements matched by the XPath expression.\n\nUsing this function is the equivalent of performing a match using the\nxpath_expr after appending /text(). In other words,\nExtractValue(\'<a><b>Sakila</b></a>\', \'/a/b\') and\nExtractValue(\'<a><b>Sakila</b></a>\', \'/a/b/text()\') produce the same\nresult. If xml_frag or xpath_expr is NULL, the function returns NULL.\n\nIf multiple matches are found, the content of the first child text node\nof each matching element is returned (in the order matched) as a\nsingle, space-delimited string.\n\nIf no matching text node is found for the expression (including the\nimplicit /text())---for whatever reason, as long as xpath_expr is\nvalid, and xml_frag consists of elements which are properly nested and\nclosed---an empty string is returned. No distinction is made between a\nmatch on an empty element and no match at all. This is by design.\n\nIf you need to determine whether no matching element was found in\nxml_frag or such an element was found but contained no child text\nnodes, you should test the result of an expression that uses the XPath\ncount() function. For example, both of these statements return an empty\nstring, as shown here:\n\nmysql> SELECT ExtractValue(\'<a><b/></a>\', \'/a/b\');\n+-------------------------------------+\n| ExtractValue(\'<a><b/></a>\', \'/a/b\') |\n+-------------------------------------+\n|                                     |\n+-------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT ExtractValue(\'<a><c/></a>\', \'/a/b\');\n+-------------------------------------+\n| ExtractValue(\'<a><c/></a>\', \'/a/b\') |\n+-------------------------------------+\n|                                     |\n+-------------------------------------+\n1 row in set (0.00 sec)\n\nHowever, you can determine whether there was actually a matching\nelement using the following:\n\nmysql> SELECT ExtractValue(\'<a><b/></a>\', \'count(/a/b)\');\n+-------------------------------------+\n| ExtractValue(\'<a><b/></a>\', \'count(/a/b)\') |\n+-------------------------------------+\n| 1                                   |\n+-------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT ExtractValue(\'<a><c/></a>\', \'count(/a/b)\');\n+-------------------------------------+\n| ExtractValue(\'<a><c/></a>\', \'count(/a/b)\') |\n+-------------------------------------+\n| 0                                   |\n+-------------------------------------+\n1 row in set (0.01 sec)\n\n*Important*:\n\nExtractValue() returns only CDATA, and does not return any tags that\nmight be contained within a matching tag, nor any of their content (see\nthe result returned as val1 in the following example).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/xml-functions.html\n\n','mysql> SELECT\n    ->   ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'/a\') AS val1,\n    ->   ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'/a/b\') AS val2,\n    ->   ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'//b\') AS val3,\n    ->   ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'/b\') AS val4,\n    ->   ExtractValue(\'<a>ccc<b>ddd</b><b>eee</b></a>\', \'//b\') AS val5;\n\n+------+------+------+------+---------+\n| val1 | val2 | val3 | val4 | val5    |\n+------+------+------+------+---------+\n| ccc  | ddd  | ddd  |      | ddd eee |\n+------+------+------+------+---------+\n','https://dev.mysql.com/doc/refman/8.0/en/xml-functions.html'),(245,'UPDATEXML',17,'Syntax:\nUpdateXML(xml_target, xpath_expr, new_xml)\n\nThis function replaces a single portion of a given fragment of XML\nmarkup xml_target with a new XML fragment new_xml, and then returns the\nchanged XML. The portion of xml_target that is replaced matches an\nXPath expression xpath_expr supplied by the user.\n\nIf no expression matching xpath_expr is found, or if multiple matches\nare found, the function returns the original xml_target XML fragment.\nAll three arguments should be strings. If any of the arguments to\nUpdateXML() are NULL, the function returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/xml-functions.html\n\n','mysql> SELECT\n    ->   UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'/a\', \'<e>fff</e>\') AS val1,\n    ->   UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'/b\', \'<e>fff</e>\') AS val2,\n    ->   UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'//b\', \'<e>fff</e>\') AS val3,\n    ->   UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'/a/d\', \'<e>fff</e>\') AS val4,\n    ->   UpdateXML(\'<a><d></d><b>ccc</b><d></d></a>\', \'/a/d\', \'<e>fff</e>\') AS val5\n    -> \\G\n\n*************************** 1. row ***************************\nval1: <e>fff</e>\nval2: <a><b>ccc</b><d></d></a>\nval3: <a><e>fff</e><d></d></a>\nval4: <a><b>ccc</b><e>fff</e></a>\nval5: <a><d></d><b>ccc</b><d></d></a>\n','https://dev.mysql.com/doc/refman/8.0/en/xml-functions.html'),(246,'|',18,'Syntax:\n|\n\nBitwise OR.\n\nThe result type depends on whether the arguments are evaluated as\nbinary strings or numbers:\n\no Binary-string evaluation occurs when the arguments have a binary\n  string type, and at least one of them is not a hexadecimal literal,\n  bit literal, or NULL literal. Numeric evaluation occurs otherwise,\n  with argument conversion to unsigned 64-bit integers as necessary.\n\no Binary-string evaluation produces a binary string of the same length\n  as the arguments. If the arguments have unequal lengths, an\n  ER_INVALID_BITWISE_OPERANDS_SIZE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_invalid_bitwise_operands_size) error occurs. Numeric\n  evaluation produces an unsigned 64-bit integer.\n\nFor more information, see the introductory discussion in this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html\n\n','mysql> SELECT 29 | 15;\n        -> 31\nmysql> SELECT _binary X\'40404040\' | X\'01020304\';\n        -> \'ABCD\'\n','https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html'),(247,'&',18,'Syntax:\n&\n\nBitwise AND.\n\nThe result type depends on whether the arguments are evaluated as\nbinary strings or numbers:\n\no Binary-string evaluation occurs when the arguments have a binary\n  string type, and at least one of them is not a hexadecimal literal,\n  bit literal, or NULL literal. Numeric evaluation occurs otherwise,\n  with argument conversion to unsigned 64-bit integers as necessary.\n\no Binary-string evaluation produces a binary string of the same length\n  as the arguments. If the arguments have unequal lengths, an\n  ER_INVALID_BITWISE_OPERANDS_SIZE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_invalid_bitwise_operands_size) error occurs. Numeric\n  evaluation produces an unsigned 64-bit integer.\n\nFor more information, see the introductory discussion in this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html\n\n','mysql> SELECT 29 & 15;\n        -> 13\nmysql> SELECT HEX(_binary X\'FF\' & b\'11110000\');\n        -> \'F0\'\n','https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html'),(248,'^',18,'Syntax:\n^\n\nBitwise XOR.\n\nThe result type depends on whether the arguments are evaluated as\nbinary strings or numbers:\n\no Binary-string evaluation occurs when the arguments have a binary\n  string type, and at least one of them is not a hexadecimal literal,\n  bit literal, or NULL literal. Numeric evaluation occurs otherwise,\n  with argument conversion to unsigned 64-bit integers as necessary.\n\no Binary-string evaluation produces a binary string of the same length\n  as the arguments. If the arguments have unequal lengths, an\n  ER_INVALID_BITWISE_OPERANDS_SIZE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_invalid_bitwise_operands_size) error occurs. Numeric\n  evaluation produces an unsigned 64-bit integer.\n\nFor more information, see the introductory discussion in this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html\n\n','mysql> SELECT 1 ^ 1;\n        -> 0\nmysql> SELECT 1 ^ 0;\n        -> 1\nmysql> SELECT 11 ^ 3;\n        -> 8\nmysql> SELECT HEX(_binary X\'FEDC\' ^ X\'1111\');\n        -> \'EFCD\'\n','https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html'),(249,'<<',18,'Syntax:\n<<\n\nShifts a longlong (BIGINT) number or binary string to the left.\n\nThe result type depends on whether the bit argument is evaluated as a\nbinary string or number:\n\no Binary-string evaluation occurs when the bit argument has a binary\n  string type, and is not a hexadecimal literal, bit literal, or NULL\n  literal. Numeric evaluation occurs otherwise, with argument\n  conversion to an unsigned 64-bit integer as necessary.\n\no Binary-string evaluation produces a binary string of the same length\n  as the bit argument. Numeric evaluation produces an unsigned 64-bit\n  integer.\n\nBits shifted off the end of the value are lost without warning,\nregardless of the argument type. In particular, if the shift count is\ngreater or equal to the number of bits in the bit argument, all bits in\nthe result are 0.\n\nFor more information, see the introductory discussion in this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html\n\n','mysql> SELECT 1 << 2;\n        -> 4\nmysql> SELECT HEX(_binary X\'00FF00FF00FF\' << 8);\n        -> \'FF00FF00FF00\'\n','https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html'),(250,'>>',18,'Syntax:\n>>\n\nShifts a longlong (BIGINT) number or binary string to the right.\n\nThe result type depends on whether the bit argument is evaluated as a\nbinary string or number:\n\no Binary-string evaluation occurs when the bit argument has a binary\n  string type, and is not a hexadecimal literal, bit literal, or NULL\n  literal. Numeric evaluation occurs otherwise, with argument\n  conversion to an unsigned 64-bit integer as necessary.\n\no Binary-string evaluation produces a binary string of the same length\n  as the bit argument. Numeric evaluation produces an unsigned 64-bit\n  integer.\n\nBits shifted off the end of the value are lost without warning,\nregardless of the argument type. In particular, if the shift count is\ngreater or equal to the number of bits in the bit argument, all bits in\nthe result are 0.\n\nFor more information, see the introductory discussion in this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html\n\n','mysql> SELECT 4 >> 2;\n        -> 1\nmysql> SELECT HEX(_binary X\'00FF00FF00FF\' >> 8);\n        -> \'0000FF00FF00\'\n','https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html'),(251,'~',18,'Syntax:\n~\n\nInvert all bits.\n\nThe result type depends on whether the bit argument is evaluated as a\nbinary string or number:\n\no Binary-string evaluation occurs when the bit argument has a binary\n  string type, and is not a hexadecimal literal, bit literal, or NULL\n  literal. Numeric evaluation occurs otherwise, with argument\n  conversion to an unsigned 64-bit integer as necessary.\n\no Binary-string evaluation produces a binary string of the same length\n  as the bit argument. Numeric evaluation produces an unsigned 64-bit\n  integer.\n\nFor more information, see the introductory discussion in this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html\n\n','mysql> SELECT 5 & ~1;\n        -> 4\nmysql> SELECT HEX(~X\'0000FFFF1111EEEE\');\n        -> \'FFFF0000EEEE1111\'\n','https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html'),(252,'BIT_COUNT',18,'Syntax:\nBIT_COUNT(N)\n\nReturns the number of bits that are set in the argument N as an\nunsigned 64-bit integer, or NULL if the argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html\n\n','mysql> SELECT BIT_COUNT(64), BIT_COUNT(BINARY 64);\n        -> 1, 7\nmysql> SELECT BIT_COUNT(\'64\'), BIT_COUNT(_binary \'64\');\n        -> 1, 7\nmysql> SELECT BIT_COUNT(X\'40\'), BIT_COUNT(_binary X\'40\');\n        -> 1, 1\n','https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html'),(253,'AES_DECRYPT',19,'Syntax:\nAES_DECRYPT(crypt_str,key_str[,init_vector][,kdf_name][,salt][,info |\niterations])\n\nThis function decrypts data using the official AES (Advanced Encryption\nStandard) algorithm. For more information, see the description of\nAES_ENCRYPT().\n\nStatements that use AES_DECRYPT() are unsafe for statement-based\nreplication.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(254,'AES_ENCRYPT',19,'Syntax:\nAES_ENCRYPT(str,key_str[,init_vector][,kdf_name][,salt][,info |\niterations])\n\nAES_ENCRYPT() and AES_DECRYPT() implement encryption and decryption of\ndata using the official AES (Advanced Encryption Standard) algorithm,\npreviously known as \"Rijndael.\" The AES standard permits various key\nlengths. By default these functions implement AES with a 128-bit key\nlength. Key lengths of 196 or 256 bits can be used, as described later.\nThe key length is a trade off between performance and security.\n\nAES_ENCRYPT() encrypts the string str using the key string key_str, and\nreturns a binary string containing the encrypted output. AES_DECRYPT()\ndecrypts the encrypted string crypt_str using the key string key_str,\nand returns the original (binary) string in hexadecimal format. (To\nobtain the string as plaintext, cast the result to CHAR. Alternatively,\nstart the mysql client with --skip-binary-as-hex to cause all binary\nvalues to be displayed as text.) If either function argument is NULL,\nthe function returns NULL. If AES_DECRYPT() detects invalid data or\nincorrect padding, it returns NULL. However, it is possible for\nAES_DECRYPT() to return a non-NULL value (possibly garbage) if the\ninput data or the key is invalid.\n\nAs of MySQL 8.0.30, these functions support the use of a key derivation\nfunction (KDF) to create a cryptographically strong secret key from the\ninformation passed in key_str. The derived key is used to encrypt and\ndecrypt the data, and it remains in the MySQL Server instance and is\nnot accessible to users. Using a KDF is highly recommended, as it\nprovides better security than specifying your own premade key or\nderiving it by a simpler method as you use the function. The functions\nsupport HKDF (available from OpenSSL 1.1.0), for which you can specify\nan optional salt and context-specific information to include in the\nkeying material, and PBKDF2 (available from OpenSSL 1.0.2), for which\nyou can specify an optional salt and set the number of iterations used\nto produce the key.\n\nAES_ENCRYPT() and AES_DECRYPT() permit control of the block encryption\nmode. The block_encryption_mode system variable controls the mode for\nblock-based encryption algorithms. Its default value is aes-128-ecb,\nwhich signifies encryption using a key length of 128 bits and ECB mode.\nFor a description of the permitted values of this variable, see\nhttps://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html.\nThe optional init_vector argument is used to provide an initialization\nvector for block encryption modes that require it.\n\nStatements that use AES_ENCRYPT() or AES_DECRYPT() are unsafe for\nstatement-based replication.\n\nIf AES_ENCRYPT() is invoked from within the mysql client, binary\nstrings display using hexadecimal notation, depending on the value of\nthe --binary-as-hex. For more information about that option, see\nhttps://dev.mysql.com/doc/refman/8.0/en/mysql.html.\n\nThe arguments for the AES_ENCRYPT() and AES_DECRYPT() functions are as\nfollows:\n\no str\n\n  The string for AES_ENCRYPT() to encrypt using the key string key_str,\n  or (from MySQL 8.0.30) the key derived from it by the specified KDF.\n  The string can be any length. Padding is automatically added to str\n  so it is a multiple of a block as required by block-based algorithms\n  such as AES. This padding is automatically removed by the\n  AES_DECRYPT() function.\n\no crypt_str\n\n  The encrypted string for AES_DECRYPT() to decrypt using the key\n  string key_str, or (from MySQL 8.0.30) the key derived from it by the\n  specified KDF. The string can be any length. The length of crypt_str\n  can be calculated from the length of the original string using this\n  formula:\n\n16 * (trunc(string_length / 16) + 1)\n\no key_str\n\n  The encryption key, or the input keying material that is used as the\n  basis for deriving a key using a key derivation function (KDF). For\n  the same instance of data, use the same value of key_str for\n  encryption with AES_ENCRYPT() and decryption with AES_DECRYPT().\n\n  If you are using a KDF, which you can from MySQL 8.0.30, key_str can\n  be any arbitrary information such as a password or passphrase. In the\n  further arguments for the function, you specify the KDF name, then\n  add further options to increase the security as appropriate for the\n  KDF.\n\n  When you use a KDF, the function creates a cryptographically strong\n  secret key from the information passed in key_str and any salt or\n  additional information that you provide in the other arguments. The\n  derived key is used to encrypt and decrypt the data, and it remains\n  in the MySQL Server instance and is not accessible to users. Using a\n  KDF is highly recommended, as it provides better security than\n  specifying your own premade key or deriving it by a simpler method as\n  you use the function.\n\n  If you are not using a KDF, for a key length of 128 bits, the most\n  secure way to pass a key to the key_str argument is to create a truly\n  random 128-bit value and pass it as a binary value. For example:\n\nINSERT INTO t\nVALUES (1,AES_ENCRYPT(\'text\',UNHEX(\'F3229A0B371ED2D9441B830D21A390C3\')));\n\n  A passphrase can be used to generate an AES key by hashing the\n  passphrase. For example:\n\nINSERT INTO t\nVALUES (1,AES_ENCRYPT(\'text\', UNHEX(SHA2(\'My secret passphrase\',512))));\n\n  If you exceed the maximum key length of 128 bits, a warning is\n  returned. If you are not using a KDF, do not pass a password or\n  passphrase directly to key_str, hash it first. Previous versions of\n  this documentation suggested the former approach, but it is no longer\n  recommended as the examples shown here are more secure.\n\no init_vector\n\n  An initialization vector, for block encryption modes that require it.\n  The block_encryption_mode system variable controls the mode. For the\n  same instance of data, use the same value of init_vector for\n  encryption with AES_ENCRYPT() and decryption with AES_DECRYPT().\n\n  *Note*:\n\n  If you are using a KDF, you must specify an initialization vector or\n  a null string for this argument, in order to access the later\n  arguments to define the KDF.\n\n  For modes that require an initialization vector, it must be 16 bytes\n  or longer (bytes in excess of 16 are ignored). An error occurs if\n  init_vector is missing. For modes that do not require an\n  initialization vector, it is ignored and a warning is generated if\n  init_vector is specified, unless you are using a KDF.\n\n  The default value for the block_encryption_mode system variable is\n  aes-128-ecb, or ECB mode, which does not require an initialization\n  vector. The alternative permitted block encryption modes CBC, CFB1,\n  CFB8, CFB128, and OFB all require an initialization vector.\n\n  A random string of bytes to use for the initialization vector can be\n  produced by calling RANDOM_BYTES(16).\n\no kdf_name\n\n  The name of the key derivation function (KDF) to create a key from\n  the input keying material passed in key_str, and other arguments as\n  appropriate for the KDF. This optional argument is available from\n  MySQL 8.0.30.\n\n  For the same instance of data, use the same value of kdf_name for\n  encryption with AES_ENCRYPT() and decryption with AES_DECRYPT(). When\n  you specify kdf_name, you must specify init_vector, using either a\n  valid initialization vector, or a null string if the encryption mode\n  does not require an initialization vector.\n\n  The following values are supported:\n\n  o hkdf\n\n    HKDF, which is available from OpenSSL 1.1.0. HKDF extracts a\n    pseudorandom key from the keying material then expands it into\n    additional keys. With HKDF, you can specify an optional salt (salt)\n    and context-specific information such as application details (info)\n    to include in the keying material.\n\n  o pbkdf2_hmac\n\n    PBKDF2, which is available from OpenSSL 1.0.2. PBKDF2 applies a\n    pseudorandom function to the keying material, and repeats this\n    process a large number of times to produce the key. With PBKDF2,\n    you can specify an optional salt (salt) to include in the keying\n    material, and set the number of iterations used to produce the key\n    (iterations).\n\n  In this example, HKDF is specified as the key derivation function,\n  and a salt and context information are provided. The argument for the\n  initialization vector is included but is the empty string:\n\nSELECT AES_ENCRYPT(\'mytext\',\'mykeystring\', \'\', \'hkdf\', \'salt\', \'info\');\n\n  In this example, PBKDF2 is specified as the key derivation function,\n  a salt is provided, and the number of iterations is doubled from the\n  recommended minimum:\n\nSELECT AES_ENCRYPT(\'mytext\',\'mykeystring\', \'\', \'pbkdf2_hmac\',\'salt\', \'2000\');\n\no salt\n\n  A salt to be passed to the key derivation function (KDF). This\n  optional argument is available from MySQL 8.0.30. Both HKDF and\n  PBKDF2 can use salts, and their use is recommended to help prevent\n  attacks based on dictionaries of common passwords or rainbow tables.\n\n  A salt consists of random data, which for security must be different\n  for each encryption operation. A random string of bytes to use for\n  the salt can be produced by calling RANDOM_BYTES(). This example\n  produces a 64-bit salt:\n\nSET @salt = RANDOM_BYTES(8);\n\n  For the same instance of data, use the same value of salt for\n  encryption with AES_ENCRYPT() and decryption with AES_DECRYPT(). The\n  salt can safely be stored along with the encrypted data.\n\no info\n\n  Context-specific information for HKDF to include in the keying\n  material, such as information about the application. This optional\n  argument is available from MySQL 8.0.30 when you specify hkdf as the\n  KDF name. HKDF adds this information to the keying material specified\n  in key_str and the salt specified in salt to produce the key.\n\n  For the same instance of data, use the same value of info for\n  encryption with AES_ENCRYPT() and decryption with AES_DECRYPT().\n\no iterations\n\n  The iteration count for PBKDF2 to use when producing the key. This\n  optional argument is available from MySQL 8.0.30 when you specify\n  pbkdf2_hmac as the KDF name. A higher count gives greater resistance\n  to brute-force attacks because it has a greater computational cost\n  for the attacker, but the same is necessarily true for the key\n  derivation process. The default if you do not specify this argument\n  is 1000, which is the minimum recommended by the OpenSSL standard.\n\n  For the same instance of data, use the same value of iterations for\n  encryption with AES_ENCRYPT() and decryption with AES_DECRYPT().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','mysql> SET block_encryption_mode = \'aes-256-cbc\';\nmysql> SET @key_str = SHA2(\'My secret passphrase\',512);\nmysql> SET @init_vector = RANDOM_BYTES(16);\nmysql> SET @crypt_str = AES_ENCRYPT(\'text\',@key_str,@init_vector);\nmysql> SELECT CAST(AES_DECRYPT(@crypt_str,@key_str,@init_vector) AS CHAR);\n+-------------------------------------------------------------+\n| CAST(AES_DECRYPT(@crypt_str,@key_str,@init_vector) AS CHAR) |\n+-------------------------------------------------------------+\n| text                                                        |\n+-------------------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(255,'COMPRESS',19,'Syntax:\nCOMPRESS(string_to_compress)\n\nCompresses a string and returns the result as a binary string. This\nfunction requires MySQL to have been compiled with a compression\nlibrary such as zlib. Otherwise, the return value is always NULL. The\nreturn value is also NULL if string_to_compress is NULL. The compressed\nstring can be uncompressed with UNCOMPRESS().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','mysql> SELECT LENGTH(COMPRESS(REPEAT(\'a\',1000)));\n        -> 21\nmysql> SELECT LENGTH(COMPRESS(\'\'));\n        -> 0\nmysql> SELECT LENGTH(COMPRESS(\'a\'));\n        -> 13\nmysql> SELECT LENGTH(COMPRESS(REPEAT(\'a\',16)));\n        -> 15\n','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(256,'MD5',19,'Syntax:\nMD5(str)\n\nCalculates an MD5 128-bit checksum for the string. The value is\nreturned as a string of 32 hexadecimal digits, or NULL if the argument\nwas NULL. The return value can, for example, be used as a hash key. See\nthe notes at the beginning of this section about storing hash values\nefficiently.\n\nThe return value is a string in the connection character set.\n\nIf FIPS mode is enabled, MD5() returns NULL. See\nhttps://dev.mysql.com/doc/refman/8.0/en/fips-mode.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','mysql> SELECT MD5(\'testing\');\n        -> \'ae2b1fca515949e5d54fb22b8ed95575\'\n','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(257,'RANDOM_BYTES',19,'Syntax:\nRANDOM_BYTES(len)\n\nThis function returns a binary string of len random bytes generated\nusing the random number generator of the SSL library. Permitted values\nof len range from 1 to 1024. For values outside that range, an error\noccurs. Returns NULL if len is NULL.\n\nRANDOM_BYTES() can be used to provide the initialization vector for the\nAES_DECRYPT() and AES_ENCRYPT() functions. For use in that context, len\nmust be at least 16. Larger values are permitted, but bytes in excess\nof 16 are ignored.\n\nRANDOM_BYTES() generates a random value, which makes its result\nnondeterministic. Consequently, statements that use this function are\nunsafe for statement-based replication.\n\nIf RANDOM_BYTES() is invoked from within the mysql client, binary\nstrings display using hexadecimal notation, depending on the value of\nthe --binary-as-hex. For more information about that option, see\nhttps://dev.mysql.com/doc/refman/8.0/en/mysql.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(258,'SHA1',19,'Syntax:\nSHA1(str), SHA(str)\n\nCalculates an SHA-1 160-bit checksum for the string, as described in\nRFC 3174 (Secure Hash Algorithm). The value is returned as a string of\n40 hexadecimal digits, or NULL if the argument is NULL. One of the\npossible uses for this function is as a hash key. See the notes at the\nbeginning of this section about storing hash values efficiently. SHA()\nis synonymous with SHA1().\n\nThe return value is a string in the connection character set.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','mysql> SELECT SHA1(\'abc\');\n        -> \'a9993e364706816aba3e25717850c26c9cd0d89d\'\n','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(259,'SHA2',19,'Syntax:\nSHA2(str, hash_length)\n\nCalculates the SHA-2 family of hash functions (SHA-224, SHA-256,\nSHA-384, and SHA-512). The first argument is the plaintext string to be\nhashed. The second argument indicates the desired bit length of the\nresult, which must have a value of 224, 256, 384, 512, or 0 (which is\nequivalent to 256). If either argument is NULL or the hash length is\nnot one of the permitted values, the return value is NULL. Otherwise,\nthe function result is a hash value containing the desired number of\nbits. See the notes at the beginning of this section about storing hash\nvalues efficiently.\n\nThe return value is a string in the connection character set.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','mysql> SELECT SHA2(\'abc\', 224);\n        -> \'23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7\'\n','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(260,'STATEMENT_DIGEST',19,'STATEMENT_DIGEST(statement)\n\nGiven an SQL statement as a string, returns the statement digest hash\nvalue as a string in the connection character set, or NULL if the\nargument is NULL. The related STATEMENT_DIGEST_TEXT() function returns\nthe normalized statement digest. For information about statement\ndigesting, see\nhttps://dev.mysql.com/doc/refman/8.0/en/performance-schema-statement-di\ngests.html.\n\nBoth functions use the MySQL parser to parse the statement. If parsing\nfails, an error occurs. The error message includes the parse error only\nif the statement is provided as a literal string.\n\nThe max_digest_length system variable determines the maximum number of\nbytes available to these functions for computing normalized statement\ndigests.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','mysql> SET @stmt = \'SELECT * FROM mytable WHERE cola = 10 AND colb = 20\';\nmysql> SELECT STATEMENT_DIGEST(@stmt);\n+------------------------------------------------------------------+\n| STATEMENT_DIGEST(@stmt)                                          |\n+------------------------------------------------------------------+\n| 3bb95eeade896657c4526e74ff2a2862039d0a0fe8a9e7155b5fe492cbd78387 |\n+------------------------------------------------------------------+\nmysql> SELECT STATEMENT_DIGEST_TEXT(@stmt);\n+----------------------------------------------------------+\n| STATEMENT_DIGEST_TEXT(@stmt)                             |\n+----------------------------------------------------------+\n| SELECT * FROM `mytable` WHERE `cola` = ? AND `colb` = ?  |\n+----------------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(261,'STATEMENT_DIGEST_TEXT',19,'STATEMENT_DIGEST_TEXT(statement)\n\nGiven an SQL statement as a string, returns the normalized statement\ndigest as a string in the connection character set, or NULL if the\nargument is NULL. For additional discussion and examples, see the\ndescription of the related STATEMENT_DIGEST() function.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(262,'UNCOMPRESS',19,'Syntax:\nUNCOMPRESS(string_to_uncompress)\n\nUncompresses a string compressed by the COMPRESS() function. If the\nargument is not a compressed value, the result is NULL; if\nstring_to_uncompress is NULL, the result is also NULL. This function\nrequires MySQL to have been compiled with a compression library such as\nzlib. Otherwise, the return value is always NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','mysql> SELECT UNCOMPRESS(COMPRESS(\'any string\'));\n        -> \'any string\'\nmysql> SELECT UNCOMPRESS(\'any string\');\n        -> NULL\n','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(263,'UNCOMPRESSED_LENGTH',19,'Syntax:\nUNCOMPRESSED_LENGTH(compressed_string)\n\nReturns the length that the compressed string had before being\ncompressed. Returns NULL if compressed_string is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT(\'a\',30)));\n        -> 30\n','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(264,'VALIDATE_PASSWORD_STRENGTH',19,'Syntax:\nVALIDATE_PASSWORD_STRENGTH(str)\n\nGiven an argument representing a plaintext password, this function\nreturns an integer to indicate how strong the password is, or NULL if\nthe argument is NULL. The return value ranges from 0 (weak) to 100\n(strong).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html'),(265,'GET_LOCK',20,'Syntax:\nGET_LOCK(str,timeout)\n\nTries to obtain a lock with a name given by the string str, using a\ntimeout of timeout seconds. A negative timeout value means infinite\ntimeout. The lock is exclusive. While held by one session, other\nsessions cannot obtain a lock of the same name.\n\nReturns 1 if the lock was obtained successfully, 0 if the attempt timed\nout (for example, because another client has previously locked the\nname), or NULL if an error occurred (such as running out of memory or\nthe thread was killed with mysqladmin kill).\n\nA lock obtained with GET_LOCK() is released explicitly by executing\nRELEASE_LOCK() or implicitly when your session terminates (either\nnormally or abnormally). Locks obtained with GET_LOCK() are not\nreleased when transactions commit or roll back.\n\nGET_LOCK() is implemented using the metadata locking (MDL) subsystem.\nMultiple simultaneous locks can be acquired and GET_LOCK() does not\nrelease any existing locks. For example, suppose that you execute these\nstatements:\n\nSELECT GET_LOCK(\'lock1\',10);\nSELECT GET_LOCK(\'lock2\',10);\nSELECT RELEASE_LOCK(\'lock2\');\nSELECT RELEASE_LOCK(\'lock1\');\n\nThe second GET_LOCK() acquires a second lock and both RELEASE_LOCK()\ncalls return 1 (success).\n\nIt is even possible for a given session to acquire multiple locks for\nthe same name. Other sessions cannot acquire a lock with that name\nuntil the acquiring session releases all its locks for the name.\n\nUniquely named locks acquired with GET_LOCK() appear in the Performance\nSchema metadata_locks table. The OBJECT_TYPE column says USER LEVEL\nLOCK and the OBJECT_NAME column indicates the lock name. In the case\nthat multiple locks are acquired for the same name, only the first lock\nfor the name registers a row in the metadata_locks table. Subsequent\nlocks for the name increment a counter in the lock but do not acquire\nadditional metadata locks. The metadata_locks row for the lock is\ndeleted when the last lock instance on the name is released.\n\nThe capability of acquiring multiple locks means there is the\npossibility of deadlock among clients. When this happens, the server\nchooses a caller and terminates its lock-acquisition request with an\nER_USER_LOCK_DEADLOCK\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_user_lock_deadlock) error. This error does not cause\ntransactions to roll back.\n\nMySQL enforces a maximum length on lock names of 64 characters.\n\nGET_LOCK() can be used to implement application locks or to simulate\nrecord locks. Names are locked on a server-wide basis. If a name has\nbeen locked within one session, GET_LOCK() blocks any request by\nanother session for a lock with the same name. This enables clients\nthat agree on a given lock name to use the name to perform cooperative\nadvisory locking. But be aware that it also enables a client that is\nnot among the set of cooperating clients to lock a name, either\ninadvertently or deliberately, and thus prevent any of the cooperating\nclients from locking that name. One way to reduce the likelihood of\nthis is to use lock names that are database-specific or\napplication-specific. For example, use lock names of the form\ndb_name.str or app_name.str.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html'),(266,'IS_FREE_LOCK',20,'Syntax:\nIS_FREE_LOCK(str)\n\nChecks whether the lock named str is free to use (that is, not locked).\nReturns 1 if the lock is free (no one is using the lock), 0 if the lock\nis in use, and NULL if an error occurs (such as an incorrect argument).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html'),(267,'IS_USED_LOCK',20,'Syntax:\nIS_USED_LOCK(str)\n\nChecks whether the lock named str is in use (that is, locked). If so,\nit returns the connection identifier of the client session that holds\nthe lock. Otherwise, it returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html'),(268,'RELEASE_ALL_LOCKS',20,'Syntax:\nRELEASE_ALL_LOCKS()\n\nReleases all named locks held by the current session and returns the\nnumber of locks released (0 if there were none)\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html'),(269,'RELEASE_LOCK',20,'Syntax:\nRELEASE_LOCK(str)\n\nReleases the lock named by the string str that was obtained with\nGET_LOCK(). Returns 1 if the lock was released, 0 if the lock was not\nestablished by this thread (in which case the lock is not released),\nand NULL if the named lock did not exist. The lock does not exist if it\nwas never obtained by a call to GET_LOCK() or if it has previously been\nreleased.\n\nThe DO statement is convenient to use with RELEASE_LOCK(). See [HELP\nDO].\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html'),(270,'BENCHMARK',21,'Syntax:\nBENCHMARK(count,expr)\n\nThe BENCHMARK() function executes the expression expr repeatedly count\ntimes. It may be used to time how quickly MySQL processes the\nexpression. The result value is 0, or NULL for inappropriate arguments\nsuch as a NULL or negative repeat count.\n\nThe intended use is from within the mysql client, which reports query\nexecution times:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT BENCHMARK(1000000,AES_ENCRYPT(\'hello\',\'goodbye\'));\n+---------------------------------------------------+\n| BENCHMARK(1000000,AES_ENCRYPT(\'hello\',\'goodbye\')) |\n+---------------------------------------------------+\n|                                                 0 |\n+---------------------------------------------------+\n1 row in set (4.74 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(271,'CHARSET',21,'Syntax:\nCHARSET(str)\n\nReturns the character set of the string argument, or NULL if the\nargument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT CHARSET(\'abc\');\n        -> \'utf8mb3\'\nmysql> SELECT CHARSET(CONVERT(\'abc\' USING latin1));\n        -> \'latin1\'\nmysql> SELECT CHARSET(USER());\n        -> \'utf8mb3\'\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(272,'COERCIBILITY',21,'Syntax:\nCOERCIBILITY(str)\n\nReturns the collation coercibility value of the string argument.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT COERCIBILITY(\'abc\' COLLATE utf8mb4_swedish_ci);\n        -> 0\nmysql> SELECT COERCIBILITY(USER());\n        -> 3\nmysql> SELECT COERCIBILITY(\'abc\');\n        -> 4\nmysql> SELECT COERCIBILITY(1000);\n        -> 5\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(273,'COLLATION',21,'Syntax:\nCOLLATION(str)\n\nReturns the collation of the string argument.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT COLLATION(\'abc\');\n        -> \'utf8mb4_0900_ai_ci\'\nmysql> SELECT COLLATION(_utf8mb4\'abc\');\n        -> \'utf8mb4_0900_ai_ci\'\nmysql> SELECT COLLATION(_latin1\'abc\');\n        -> \'latin1_swedish_ci\'\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(274,'CONNECTION_ID',21,'Syntax:\nCONNECTION_ID()\n\nReturns the connection ID (thread ID) for the connection. Every\nconnection has an ID that is unique among the set of currently\nconnected clients.\n\nThe value returned by CONNECTION_ID() is the same type of value as\ndisplayed in the ID column of the Information Schema PROCESSLIST table,\nthe Id column of SHOW PROCESSLIST output, and the PROCESSLIST_ID column\nof the Performance Schema threads table.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT CONNECTION_ID();\n        -> 23786\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(275,'CURRENT_ROLE',21,'CURRENT_ROLE()\n\nReturns a utf8mb3 string containing the current active roles for the\ncurrent session, separated by commas, or NONE if there are none. The\nvalue reflects the setting of the sql_quote_show_create system\nvariable.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','GRANT \'r1\', \'r2\' TO \'u1\'@\'localhost\';\nSET DEFAULT ROLE ALL TO \'u1\'@\'localhost\';\n\nmysql> SELECT CURRENT_ROLE();\n+-------------------+\n| CURRENT_ROLE()    |\n+-------------------+\n| `r1`@`%`,`r2`@`%` |\n+-------------------+\nmysql> SET ROLE \'r1\'; SELECT CURRENT_ROLE();\n+----------------+\n| CURRENT_ROLE() |\n+----------------+\n| `r1`@`%`       |\n+----------------+\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(276,'CURRENT_USER',21,'Syntax:\nCURRENT_USER, CURRENT_USER()\n\nReturns the user name and host name combination for the MySQL account\nthat the server used to authenticate the current client. This account\ndetermines your access privileges. The return value is a string in the\nutf8mb3 character set.\n\nThe value of CURRENT_USER() can differ from the value of USER().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT USER();\n        -> \'davida@localhost\'\nmysql> SELECT * FROM mysql.user;\nERROR 1044: Access denied for user \'\'@\'localhost\' to\ndatabase \'mysql\'\nmysql> SELECT CURRENT_USER();\n        -> \'@localhost\'\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(277,'DATABASE',21,'Syntax:\nDATABASE()\n\nReturns the default (current) database name as a string in the utf8mb3\ncharacter set. If there is no default database, DATABASE() returns\nNULL. Within a stored routine, the default database is the database\nthat the routine is associated with, which is not necessarily the same\nas the database that is the default in the calling context.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT DATABASE();\n        -> \'test\'\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(278,'FOUND_ROWS',21,'Syntax:\nFOUND_ROWS()\n\n*Note*:\n\nThe SQL_CALC_FOUND_ROWS query modifier and accompanying FOUND_ROWS()\nfunction are deprecated as of MySQL 8.0.17; expect them to be removed\nin a future version of MySQL. As a replacement, considering executing\nyour query with LIMIT, and then a second query with COUNT(*) and\nwithout LIMIT to determine whether there are additional rows. For\nexample, instead of these queries:\n\nSELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;\nSELECT FOUND_ROWS();\n\nUse these queries instead:\n\nSELECT * FROM tbl_name WHERE id > 100 LIMIT 10;\nSELECT COUNT(*) FROM tbl_name WHERE id > 100;\n\nCOUNT(*) is subject to certain optimizations. SQL_CALC_FOUND_ROWS\ncauses some optimizations to be disabled.\n\nA SELECT statement may include a LIMIT clause to restrict the number of\nrows the server returns to the client. In some cases, it is desirable\nto know how many rows the statement would have returned without the\nLIMIT, but without running the statement again. To obtain this row\ncount, include an SQL_CALC_FOUND_ROWS option in the SELECT statement,\nand then invoke FOUND_ROWS() afterward:\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name\n    -> WHERE id > 100 LIMIT 10;\nmysql> SELECT FOUND_ROWS();\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(279,'ICU_VERSION',21,'ICU_VERSION()\n\nThe version of the International Components for Unicode (ICU) library\nused to support regular expression operations (see\nhttps://dev.mysql.com/doc/refman/8.0/en/regexp.html). This function is\nprimarily intended for use in test cases.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(280,'LAST_INSERT_ID',21,'Syntax:\nLAST_INSERT_ID(), LAST_INSERT_ID(expr)\n\nWith no argument, LAST_INSERT_ID() returns a BIGINT UNSIGNED (64-bit)\nvalue representing the first automatically generated value successfully\ninserted for an AUTO_INCREMENT column as a result of the most recently\nexecuted INSERT statement. The value of LAST_INSERT_ID() remains\nunchanged if no rows are successfully inserted.\n\nWith an argument, LAST_INSERT_ID() returns an unsigned integer, or NULL\nif the argument is NULL.\n\nFor example, after inserting a row that generates an AUTO_INCREMENT\nvalue, you can get the value like this:\n\nmysql> SELECT LAST_INSERT_ID();\n        -> 195\n\nThe currently executing statement does not affect the value of\nLAST_INSERT_ID(). Suppose that you generate an AUTO_INCREMENT value\nwith one statement, and then refer to LAST_INSERT_ID() in a\nmultiple-row INSERT statement that inserts rows into a table with its\nown AUTO_INCREMENT column. The value of LAST_INSERT_ID() remains stable\nin the second statement; its value for the second and later rows is not\naffected by the earlier row insertions. (You should be aware that, if\nyou mix references to LAST_INSERT_ID() and LAST_INSERT_ID(expr), the\neffect is undefined.)\n\nIf the previous statement returned an error, the value of\nLAST_INSERT_ID() is undefined. For transactional tables, if the\nstatement is rolled back due to an error, the value of LAST_INSERT_ID()\nis left undefined. For manual ROLLBACK, the value of LAST_INSERT_ID()\nis not restored to that before the transaction; it remains as it was at\nthe point of the ROLLBACK.\n\nWithin the body of a stored routine (procedure or function) or a\ntrigger, the value of LAST_INSERT_ID() changes the same way as for\nstatements executed outside the body of these kinds of objects. The\neffect of a stored routine or trigger upon the value of\nLAST_INSERT_ID() that is seen by following statements depends on the\nkind of routine:\n\no If a stored procedure executes statements that change the value of\n  LAST_INSERT_ID(), the changed value is seen by statements that follow\n  the procedure call.\n\no For stored functions and triggers that change the value, the value is\n  restored when the function or trigger ends, so statements coming\n  after it do not see a changed value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(281,'ROLES_GRAPHML',21,'ROLES_GRAPHML()\n\nReturns a utf8mb3 string containing a GraphML document representing\nmemory role subgraphs. The ROLE_ADMIN privilege (or the deprecated\nSUPER privilege) is required to see content in the <graphml> element.\nOtherwise, the result shows only an empty element:\n\nmysql> SELECT ROLES_GRAPHML();\n+---------------------------------------------------+\n| ROLES_GRAPHML()                                   |\n+---------------------------------------------------+\n| <?xml version=\"1.0\" encoding=\"UTF-8\"?><graphml /> |\n+---------------------------------------------------+\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(282,'ROW_COUNT',21,'Syntax:\nROW_COUNT()\n\nROW_COUNT() returns a value as follows:\n\no DDL statements: 0. This applies to statements such as CREATE TABLE or\n  DROP TABLE.\n\no DML statements other than SELECT: The number of affected rows. This\n  applies to statements such as UPDATE, INSERT, or DELETE (as before),\n  but now also to statements such as ALTER TABLE and LOAD DATA.\n\no SELECT: -1 if the statement returns a result set, or the number of\n  rows \"affected\" if it does not. For example, for SELECT * FROM t1,\n  ROW_COUNT() returns -1. For SELECT * FROM t1 INTO OUTFILE\n  \'file_name\', ROW_COUNT() returns the number of rows written to the\n  file.\n\no SIGNAL statements: 0.\n\nFor UPDATE statements, the affected-rows value by default is the number\nof rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to\nmysql_real_connect()\n(https://dev.mysql.com/doc/c-api/8.0/en/mysql-real-connect.html) when\nconnecting to mysqld, the affected-rows value is the number of rows\n\"found\"; that is, matched by the WHERE clause.\n\nFor REPLACE statements, the affected-rows value is 2 if the new row\nreplaced an old row, because in this case, one row was inserted after\nthe duplicate was deleted.\n\nFor INSERT ... ON DUPLICATE KEY UPDATE statements, the affected-rows\nvalue per row is 1 if the row is inserted as a new row, 2 if an\nexisting row is updated, and 0 if an existing row is set to its current\nvalues. If you specify the CLIENT_FOUND_ROWS flag, the affected-rows\nvalue is 1 (not 0) if an existing row is set to its current values.\n\nThe ROW_COUNT() value is similar to the value from the\nmysql_affected_rows()\n(https://dev.mysql.com/doc/c-api/8.0/en/mysql-affected-rows.html) C API\nfunction and the row count that the mysql client displays following\nstatement execution.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> INSERT INTO t VALUES(1),(2),(3);\nQuery OK, 3 rows affected (0.00 sec)\nRecords: 3  Duplicates: 0  Warnings: 0\n\nmysql> SELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n|           3 |\n+-------------+\n1 row in set (0.00 sec)\n\nmysql> DELETE FROM t WHERE i IN(1,2);\nQuery OK, 2 rows affected (0.00 sec)\n\nmysql> SELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n|           2 |\n+-------------+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(283,'SCHEMA',21,'Syntax:\nSCHEMA()\n\nThis function is a synonym for DATABASE().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(284,'SESSION_USER',21,'Syntax:\nSESSION_USER()\n\nSESSION_USER() is a synonym for USER().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(285,'SYSTEM_USER',21,'Syntax:\nSYSTEM_USER()\n\nSYSTEM_USER() is a synonym for USER().\n\n*Note*:\n\nThe SYSTEM_USER() function is distinct from the SYSTEM_USER privilege.\nThe former returns the current MySQL account name. The latter\ndistinguishes the system user and regular user account categories (see\nhttps://dev.mysql.com/doc/refman/8.0/en/account-categories.html).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(286,'USER',21,'Syntax:\nUSER()\n\nReturns the current MySQL user name and host name as a string in the\nutf8mb3 character set.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT USER();\n        -> \'davida@localhost\'\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(287,'VERSION',21,'Syntax:\nVERSION()\n\nReturns a string that indicates the MySQL server version. The string\nuses the utf8mb3 character set. The value might have a suffix in\naddition to the version number. See the description of the version\nsystem variable in\nhttps://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html\n\n','mysql> SELECT VERSION();\n        -> \'8.0.34-standard\'\n','https://dev.mysql.com/doc/refman/8.0/en/information-functions.html'),(288,'ST_GEOMCOLLFROMTEXT',23,'ST_GeomCollFromText(wkt [, srid [, options]]),\nST_GeometryCollectionFromText(wkt [, srid [, options]]),\nST_GeomCollFromTxt(wkt [, srid [, options]])\n\nConstructs a GeometryCollection value using its WKT representation and\nSRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html\n\n','mysql> SET @g = \"MULTILINESTRING((10 10, 11 11), (9 9, 10 10))\";\nmysql> SELECT ST_AsText(ST_GeomCollFromText(@g));\n+--------------------------------------------+\n| ST_AsText(ST_GeomCollFromText(@g))         |\n+--------------------------------------------+\n| MULTILINESTRING((10 10,11 11),(9 9,10 10)) |\n+--------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html'),(289,'ST_GEOMFROMTEXT',23,'ST_GeomFromText(wkt [, srid [, options]]), ST_GeometryFromText(wkt [,\nsrid [, options]])\n\nConstructs a geometry value of any type using its WKT representation\nand SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html'),(290,'ST_LINEFROMTEXT',23,'ST_LineFromText(wkt [, srid [, options]]), ST_LineStringFromText(wkt [,\nsrid [, options]])\n\nConstructs a LineString value using its WKT representation and SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html'),(291,'ST_MLINEFROMTEXT',23,'ST_MLineFromText(wkt [, srid [, options]]),\nST_MultiLineStringFromText(wkt [, srid [, options]])\n\nConstructs a MultiLineString value using its WKT representation and\nSRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html'),(292,'ST_MPOINTFROMTEXT',23,'ST_MPointFromText(wkt [, srid [, options]]), ST_MultiPointFromText(wkt\n[, srid [, options]])\n\nConstructs a MultiPoint value using its WKT representation and SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html'),(293,'ST_MPOLYFROMTEXT',23,'ST_MPolyFromText(wkt [, srid [, options]]), ST_MultiPolygonFromText(wkt\n[, srid [, options]])\n\nConstructs a MultiPolygon value using its WKT representation and SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html'),(294,'ST_POINTFROMTEXT',23,'ST_PointFromText(wkt [, srid [, options]])\n\nConstructs a Point value using its WKT representation and SRID.\n\nST_PointFromText() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html'),(295,'ST_POLYFROMTEXT',23,'ST_PolyFromText(wkt [, srid [, options]]), ST_PolygonFromText(wkt [,\nsrid [, options]])\n\nConstructs a Polygon value using its WKT representation and SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html'),(296,'ST_GEOMCOLLFROMWKB',24,'ST_GeomCollFromWKB(wkb [, srid [, options]]),\nST_GeometryCollectionFromWKB(wkb [, srid [, options]])\n\nConstructs a GeometryCollection value using its WKB representation and\nSRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html'),(297,'ST_GEOMFROMWKB',24,'ST_GeomFromWKB(wkb [, srid [, options]]), ST_GeometryFromWKB(wkb [,\nsrid [, options]])\n\nConstructs a geometry value of any type using its WKB representation\nand SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html'),(298,'ST_LINEFROMWKB',24,'ST_LineFromWKB(wkb [, srid [, options]]), ST_LineStringFromWKB(wkb [,\nsrid [, options]])\n\nConstructs a LineString value using its WKB representation and SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html'),(299,'ST_MLINEFROMWKB',24,'ST_MLineFromWKB(wkb [, srid [, options]]),\nST_MultiLineStringFromWKB(wkb [, srid [, options]])\n\nConstructs a MultiLineString value using its WKB representation and\nSRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html'),(300,'ST_MPOINTFROMWKB',24,'ST_MPointFromWKB(wkb [, srid [, options]]), ST_MultiPointFromWKB(wkb [,\nsrid [, options]])\n\nConstructs a MultiPoint value using its WKB representation and SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html'),(301,'ST_MPOLYFROMWKB',24,'ST_MPolyFromWKB(wkb [, srid [, options]]), ST_MultiPolygonFromWKB(wkb\n[, srid [, options]])\n\nConstructs a MultiPolygon value using its WKB representation and SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html'),(302,'ST_POINTFROMWKB',24,'ST_PointFromWKB(wkb [, srid [, options]])\n\nConstructs a Point value using its WKB representation and SRID.\n\nST_PointFromWKB() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html'),(303,'ST_POLYFROMWKB',24,'ST_PolyFromWKB(wkb [, srid [, options]]), ST_PolygonFromWKB(wkb [, srid\n[, options]])\n\nConstructs a Polygon value using its WKB representation and SRID.\n\nThese functions handle their arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html'),(304,'GEOMCOLLECTION',25,'GeomCollection(g [, g] ...)\n\nConstructs a GeomCollection value from the geometry arguments.\n\nGeomCollection() returns all the proper geometries contained in the\narguments even if a nonsupported geometry is present.\n\nGeomCollection() with no arguments is permitted as a way to create an\nempty geometry. Also, functions such as ST_GeomFromText() that accept\nWKT geometry collection arguments understand both OpenGIS\n\'GEOMETRYCOLLECTION EMPTY\' standard syntax and MySQL\n\'GEOMETRYCOLLECTION()\' nonstandard syntax.\n\nGeomCollection() and GeometryCollection() are synonymous, with\nGeomCollection() the preferred function.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html'),(305,'GEOMETRYCOLLECTION',25,'GeometryCollection(g [, g] ...)\n\nConstructs a GeomCollection value from the geometry arguments.\n\nGeometryCollection() returns all the proper geometries contained in the\narguments even if a nonsupported geometry is present.\n\nGeometryCollection() with no arguments is permitted as a way to create\nan empty geometry. Also, functions such as ST_GeomFromText() that\naccept WKT geometry collection arguments understand both OpenGIS\n\'GEOMETRYCOLLECTION EMPTY\' standard syntax and MySQL\n\'GEOMETRYCOLLECTION()\' nonstandard syntax.\n\nGeomCollection() and GeometryCollection() are synonymous, with\nGeomCollection() the preferred function.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html'),(306,'LINESTRING',25,'LineString(pt [, pt] ...)\n\nConstructs a LineString value from a number of Point or WKB Point\narguments. If the number of arguments is less than two, the return\nvalue is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html'),(307,'MULTILINESTRING',25,'MultiLineString(ls [, ls] ...)\n\nConstructs a MultiLineString value using LineString or WKB LineString\narguments.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html'),(308,'MULTIPOINT',25,'MultiPoint(pt [, pt2] ...)\n\nConstructs a MultiPoint value using Point or WKB Point arguments.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html'),(309,'MULTIPOLYGON',25,'MultiPolygon(poly [, poly] ...)\n\nConstructs a MultiPolygon value from a set of Polygon or WKB Polygon\narguments.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html'),(310,'POINT',25,'Point(x, y)\n\nConstructs a Point using its coordinates.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html'),(311,'POLYGON',25,'Polygon(ls [, ls] ...)\n\nConstructs a Polygon value from a number of LineString or WKB\nLineString arguments. If any argument does not represent a LinearRing\n(that is, not a closed and simple LineString), the return value is\nNULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-mysql-specific-functions.html'),(312,'ST_ASBINARY',24,'ST_AsBinary(g [, options]), ST_AsWKB(g [, options])\n\nConverts a value in internal geometry format to its WKB representation\nand returns the binary result.\n\nThe function return value has geographic coordinates (latitude,\nlongitude) in the order specified by the spatial reference system that\napplies to the geometry argument. An optional options argument may be\ngiven to override the default axis order.\n\nST_AsBinary() and ST_AsWKB() handle their arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html\n\n','mysql> SET @g = ST_LineFromText(\'LINESTRING(0 5,5 10,10 15)\', 4326);\nmysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g)));\n+-----------------------------------------+\n| ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g))) |\n+-----------------------------------------+\n| LINESTRING(5 0,10 5,15 10)              |\n+-----------------------------------------+\nmysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, \'axis-order=long-lat\')));\n+----------------------------------------------------------------+\n| ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, \'axis-order=long-lat\'))) |\n+----------------------------------------------------------------+\n| LINESTRING(0 5,5 10,10 15)                                     |\n+----------------------------------------------------------------+\nmysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, \'axis-order=lat-long\')));\n+----------------------------------------------------------------+\n| ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, \'axis-order=lat-long\'))) |\n+----------------------------------------------------------------+\n| LINESTRING(5 0,10 5,15 10)                                     |\n+----------------------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html'),(313,'ST_ASTEXT',24,'ST_AsText(g [, options]), ST_AsWKT(g [, options])\n\nConverts a value in internal geometry format to its WKT representation\nand returns the string result.\n\nThe function return value has geographic coordinates (latitude,\nlongitude) in the order specified by the spatial reference system that\napplies to the geometry argument. An optional options argument may be\ngiven to override the default axis order.\n\nST_AsText() and ST_AsWKT() handle their arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html\n\n','mysql> SET @g = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_AsText(ST_GeomFromText(@g));\n+--------------------------------+\n| ST_AsText(ST_GeomFromText(@g)) |\n+--------------------------------+\n| LINESTRING(1 1,2 2,3 3)        |\n+--------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html'),(314,'ST_SWAPXY',24,'ST_SwapXY(g)\n\nAccepts an argument in internal geometry format, swaps the X and Y\nvalues of each coordinate pair within the geometry, and returns the\nresult.\n\nST_SwapXY() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html\n\n','mysql> SET @g = ST_LineFromText(\'LINESTRING(0 5,5 10,10 15)\');\nmysql> SELECT ST_AsText(@g);\n+----------------------------+\n| ST_AsText(@g)              |\n+----------------------------+\n| LINESTRING(0 5,5 10,10 15) |\n+----------------------------+\nmysql> SELECT ST_AsText(ST_SwapXY(@g));\n+----------------------------+\n| ST_AsText(ST_SwapXY(@g))   |\n+----------------------------+\n| LINESTRING(5 0,10 5,15 10) |\n+----------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html'),(315,'ST_DIMENSION',26,'ST_Dimension(g)\n\nReturns the inherent dimension of the geometry value g. The dimension\ncan be −1, 0, 1, or 2. The meaning of these values is given in\nhttps://dev.mysql.com/doc/refman/8.0/en/gis-class-geometry.html.\n\nST_Dimension() handles its arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_Dimension(ST_GeomFromText(\'LineString(1 1,2 2)\'));\n+------------------------------------------------------+\n| ST_Dimension(ST_GeomFromText(\'LineString(1 1,2 2)\')) |\n+------------------------------------------------------+\n|                                                    1 |\n+------------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html'),(316,'ST_ENVELOPE',26,'ST_Envelope(g)\n\nReturns the minimum bounding rectangle (MBR) for the geometry value g.\nThe result is returned as a Polygon value that is defined by the corner\npoints of the bounding box:\n\nPOLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))\n\nmysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText(\'LineString(1 1,2 2)\')));\n+----------------------------------------------------------------+\n| ST_AsText(ST_Envelope(ST_GeomFromText(\'LineString(1 1,2 2)\'))) |\n+----------------------------------------------------------------+\n| POLYGON((1 1,2 1,2 2,1 2,1 1))                                 |\n+----------------------------------------------------------------+\n\nIf the argument is a point or a vertical or horizontal line segment,\nST_Envelope() returns the point or the line segment as its MBR rather\nthan returning an invalid polygon:\n\nmysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText(\'LineString(1 1,1 2)\')));\n+----------------------------------------------------------------+\n| ST_AsText(ST_Envelope(ST_GeomFromText(\'LineString(1 1,1 2)\'))) |\n+----------------------------------------------------------------+\n| LINESTRING(1 1,1 2)                                            |\n+----------------------------------------------------------------+\n\nST_Envelope() handles its arguments as described in the introduction to\nthis section, with this exception:\n\no If the geometry has an SRID value for a geographic spatial reference\n  system (SRS), an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html'),(317,'ST_GEOMETRYTYPE',26,'ST_GeometryType(g)\n\nReturns a binary string indicating the name of the geometry type of\nwhich the geometry instance g is a member. The name corresponds to one\nof the instantiable Geometry subclasses.\n\nST_GeometryType() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_GeometryType(ST_GeomFromText(\'POINT(1 1)\'));\n+------------------------------------------------+\n| ST_GeometryType(ST_GeomFromText(\'POINT(1 1)\')) |\n+------------------------------------------------+\n| POINT                                          |\n+------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html'),(318,'ST_ISEMPTY',26,'ST_IsEmpty(g)\n\nThis function is a placeholder that returns 1 for an empty geometry\ncollection value or 0 otherwise.\n\nThe only valid empty geometry is represented in the form of an empty\ngeometry collection value. MySQL does not support GIS EMPTY values such\nas POINT EMPTY.\n\nST_IsEmpty() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html'),(319,'ST_ISSIMPLE',26,'ST_IsSimple(g)\n\nReturns 1 if the geometry value g is simple according to the ISO SQL/MM\nPart 3: Spatial standard. ST_IsSimple() returns 0 if the argument is\nnot simple.\n\nThe descriptions of the instantiable geometric classes given under\nhttps://dev.mysql.com/doc/refman/8.0/en/opengis-geometry-model.html\ninclude the specific conditions that cause class instances to be\nclassified as not simple.\n\nST_IsSimple() handles its arguments as described in the introduction to\nthis section, with this exception:\n\no If the geometry has a geographic SRS with a longitude or latitude\n  that is out of range, an error occurs:\n\n  o If a longitude value is not in the range (−180, 180], an\n    ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_longitude_out_of_range) error\n    occurs (ER_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_longitude_out_of_range) prior to MySQL 8.0.12).\n\n  o If a latitude value is not in the range [−90, 90], an\n    ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_latitude_out_of_range) error occurs\n    (ER_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_latitude_out_of_range) prior to MySQL 8.0.12).\n\n  Ranges shown are in degrees. The exact range limits deviate slightly\n  due to floating-point arithmetic.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html'),(320,'ST_SRID',26,'ST_SRID(g [, srid])\n\nWith a single argument representing a valid geometry object g,\nST_SRID() returns an integer indicating the ID of the spatial reference\nsystem (SRS) associated with g.\n\nWith the optional second argument representing a valid SRID value,\nST_SRID() returns an object with the same type as its first argument\nwith an SRID value equal to the second argument. This only sets the\nSRID value of the object; it does not perform any transformation of\ncoordinate values.\n\nST_SRID() handles its arguments as described in the introduction to\nthis section, with this exception:\n\no For the single-argument syntax, ST_SRID() returns the geometry SRID\n  even if it refers to an undefined SRS. An ER_SRS_NOT_FOUND\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_srs_not_found) error does not occur.\n\nST_SRID(g, target_srid) and ST_Transform(g, target_srid) differ as\nfollows:\n\no ST_SRID() changes the geometry SRID value without transforming its\n  coordinates.\n\no ST_Transform() transforms the geometry coordinates in addition to\n  changing its SRID value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html\n\n','mysql> SET @g = ST_GeomFromText(\'LineString(1 1,2 2)\', 0);\nmysql> SELECT ST_SRID(@g);\n+-------------+\n| ST_SRID(@g) |\n+-------------+\n|           0 |\n+-------------+\nmysql> SET @g = ST_SRID(@g, 4326);\nmysql> SELECT ST_SRID(@g);\n+-------------+\n| ST_SRID(@g) |\n+-------------+\n|        4326 |\n+-------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html'),(321,'ST_LATITUDE',27,'ST_Latitude(p [, new_latitude_val])\n\nWith a single argument representing a valid Point object p that has a\ngeographic spatial reference system (SRS), ST_Latitude() returns the\nlatitude value of p as a double-precision number.\n\nWith the optional second argument representing a valid latitude value,\nST_Latitude() returns a Point object like the first argument with its\nlatitude equal to the second argument.\n\nST_Latitude() handles its arguments as described in the introduction to\nthis section, with the addition that if the Point object is valid but\ndoes not have a geographic SRS, an ER_SRS_NOT_GEOGRAPHIC\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_srs_not_geographic) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html\n\n','mysql> SET @pt = ST_GeomFromText(\'POINT(45 90)\', 4326);\nmysql> SELECT ST_Latitude(@pt);\n+------------------+\n| ST_Latitude(@pt) |\n+------------------+\n|               45 |\n+------------------+\nmysql> SELECT ST_AsText(ST_Latitude(@pt, 10));\n+---------------------------------+\n| ST_AsText(ST_Latitude(@pt, 10)) |\n+---------------------------------+\n| POINT(10 90)                    |\n+---------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html'),(322,'ST_LONGITUDE',27,'ST_Longitude(p [, new_longitude_val])\n\nWith a single argument representing a valid Point object p that has a\ngeographic spatial reference system (SRS), ST_Longitude() returns the\nlongitude value of p as a double-precision number.\n\nWith the optional second argument representing a valid longitude value,\nST_Longitude() returns a Point object like the first argument with its\nlongitude equal to the second argument.\n\nST_Longitude() handles its arguments as described in the introduction\nto this section, with the addition that if the Point object is valid\nbut does not have a geographic SRS, an ER_SRS_NOT_GEOGRAPHIC\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_srs_not_geographic) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html\n\n','mysql> SET @pt = ST_GeomFromText(\'POINT(45 90)\', 4326);\nmysql> SELECT ST_Longitude(@pt);\n+-------------------+\n| ST_Longitude(@pt) |\n+-------------------+\n|                90 |\n+-------------------+\nmysql> SELECT ST_AsText(ST_Longitude(@pt, 10));\n+----------------------------------+\n| ST_AsText(ST_Longitude(@pt, 10)) |\n+----------------------------------+\n| POINT(45 10)                     |\n+----------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html'),(323,'ST_X',27,'ST_X(p [, new_x_val])\n\nWith a single argument representing a valid Point object p, ST_X()\nreturns the X-coordinate value of p as a double-precision number. As of\nMySQL 8.0.12, the X coordinate is considered to refer to the axis that\nappears first in the Point spatial reference system (SRS) definition.\n\nWith the optional second argument, ST_X() returns a Point object like\nthe first argument with its X coordinate equal to the second argument.\nAs of MySQL 8.0.12, if the Point object has a geographic SRS, the\nsecond argument must be in the proper range for longitude or latitude\nvalues.\n\nST_X() handles its arguments as described in the introduction to this\nsection.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html\n\n','mysql> SELECT ST_X(Point(56.7, 53.34));\n+--------------------------+\n| ST_X(Point(56.7, 53.34)) |\n+--------------------------+\n|                     56.7 |\n+--------------------------+\nmysql> SELECT ST_AsText(ST_X(Point(56.7, 53.34), 10.5));\n+-------------------------------------------+\n| ST_AsText(ST_X(Point(56.7, 53.34), 10.5)) |\n+-------------------------------------------+\n| POINT(10.5 53.34)                         |\n+-------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html'),(324,'ST_Y',27,'ST_Y(p [, new_y_val])\n\nWith a single argument representing a valid Point object p, ST_Y()\nreturns the Y-coordinate value of p as a double-precision number. As of\nMySQL 8.0.12, the Y coordinate is considered to refer to the axis that\nappears second in the Point spatial reference system (SRS) definition.\n\nWith the optional second argument, ST_Y() returns a Point object like\nthe first argument with its Y coordinate equal to the second argument.\nAs of MySQL 8.0.12, if the Point object has a geographic SRS, the\nsecond argument must be in the proper range for longitude or latitude\nvalues.\n\nST_Y() handles its arguments as described in the introduction to this\nsection.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html\n\n','mysql> SELECT ST_Y(Point(56.7, 53.34));\n+--------------------------+\n| ST_Y(Point(56.7, 53.34)) |\n+--------------------------+\n|                    53.34 |\n+--------------------------+\nmysql> SELECT ST_AsText(ST_Y(Point(56.7, 53.34), 10.5));\n+-------------------------------------------+\n| ST_AsText(ST_Y(Point(56.7, 53.34), 10.5)) |\n+-------------------------------------------+\n| POINT(56.7 10.5)                          |\n+-------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html'),(325,'ST_ENDPOINT',28,'ST_EndPoint(ls)\n\nReturns the Point that is the endpoint of the LineString value ls.\n\nST_EndPoint() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_AsText(ST_EndPoint(ST_GeomFromText(@ls)));\n+----------------------------------------------+\n| ST_AsText(ST_EndPoint(ST_GeomFromText(@ls))) |\n+----------------------------------------------+\n| POINT(3 3)                                   |\n+----------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html'),(326,'ST_ISCLOSED',28,'ST_IsClosed(ls)\n\nFor a LineString value ls, ST_IsClosed() returns 1 if ls is closed\n(that is, its ST_StartPoint() and ST_EndPoint() values are the same).\n\nFor a MultiLineString value ls, ST_IsClosed() returns 1 if ls is closed\n(that is, the ST_StartPoint() and ST_EndPoint() values are the same for\neach LineString in ls).\n\nST_IsClosed() returns 0 if ls is not closed, and NULL if ls is NULL.\n\nST_IsClosed() handles its arguments as described in the introduction to\nthis section, with this exception:\n\no If the geometry has an SRID value for a geographic spatial reference\n  system (SRS), an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls1 = \'LineString(1 1,2 2,3 3,2 2)\';\nmysql> SET @ls2 = \'LineString(1 1,2 2,3 3,1 1)\';\n\nmysql> SELECT ST_IsClosed(ST_GeomFromText(@ls1));\n+------------------------------------+\n| ST_IsClosed(ST_GeomFromText(@ls1)) |\n+------------------------------------+\n|                                  0 |\n+------------------------------------+\n\nmysql> SELECT ST_IsClosed(ST_GeomFromText(@ls2));\n+------------------------------------+\n| ST_IsClosed(ST_GeomFromText(@ls2)) |\n+------------------------------------+\n|                                  1 |\n+------------------------------------+\n\nmysql> SET @ls3 = \'MultiLineString((1 1,2 2,3 3),(4 4,5 5))\';\n\nmysql> SELECT ST_IsClosed(ST_GeomFromText(@ls3));\n+------------------------------------+\n| ST_IsClosed(ST_GeomFromText(@ls3)) |\n+------------------------------------+\n|                                  0 |\n+------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html'),(327,'ST_LENGTH',28,'ST_Length(ls [, unit])\n\nReturns a double-precision number indicating the length of the\nLineString or MultiLineString value ls in its associated spatial\nreference system. The length of a MultiLineString value is equal to the\nsum of the lengths of its elements.\n\nST_Length() computes a result as follows:\n\no If the geometry is a valid LineString in a Cartesian SRS, the return\n  value is the Cartesian length of the geometry.\n\no If the geometry is a valid MultiLineString in a Cartesian SRS, the\n  return value is the sum of the Cartesian lengths of its elements.\n\no If the geometry is a valid LineString in a geographic SRS, the return\n  value is the geodetic length of the geometry in that SRS, in meters.\n\no If the geometry is a valid MultiLineString in a geographic SRS, the\n  return value is the sum of the geodetic lengths of its elements in\n  that SRS, in meters.\n\nST_Length() handles its arguments as described in the introduction to\nthis section, with these exceptions:\n\no If the geometry is not a LineString or MultiLineString, the return\n  value is NULL.\n\no If the geometry is geometrically invalid, either the result is an\n  undefined length (that is, it can be any number), or an error occurs.\n\no If the length computation result is +inf, an ER_DATA_OUT_OF_RANGE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_data_out_of_range) error occurs.\n\no If the geometry has a geographic SRS with a longitude or latitude\n  that is out of range, an error occurs:\n\n  o If a longitude value is not in the range (−180, 180], an\n    ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_longitude_out_of_range) error\n    occurs (ER_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_longitude_out_of_range) prior to MySQL 8.0.12).\n\n  o If a latitude value is not in the range [−90, 90], an\n    ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_latitude_out_of_range) error occurs\n    (ER_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_latitude_out_of_range) prior to MySQL 8.0.12).\n\n  Ranges shown are in degrees. The exact range limits deviate slightly\n  due to floating-point arithmetic.\n\nAs of MySQL 8.0.16, ST_Length() permits an optional unit argument that\nspecifies the linear unit for the returned length value. These rules\napply:\n\no If a unit is specified but not supported by MySQL, an\n  ER_UNIT_NOT_FOUND\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_unit_not_found) error occurs.\n\no If a supported linear unit is specified and the SRID is 0, an\n  ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_geometry_in_unknown_length_unit) error occurs.\n\no If a supported linear unit is specified and the SRID is not 0, the\n  result is in that unit.\n\no If a unit is not specified, the result is in the unit of the SRS of\n  the geometries, whether Cartesian or geographic. Currently, all MySQL\n  SRSs are expressed in meters.\n\nA unit is supported if it is found in the INFORMATION_SCHEMA\nST_UNITS_OF_MEASURE table. See\nhttps://dev.mysql.com/doc/refman/8.0/en/information-schema-st-units-of-\nmeasure-table.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls = ST_GeomFromText(\'LineString(1 1,2 2,3 3)\');\nmysql> SELECT ST_Length(@ls);\n+--------------------+\n| ST_Length(@ls)     |\n+--------------------+\n| 2.8284271247461903 |\n+--------------------+\n\nmysql> SET @mls = ST_GeomFromText(\'MultiLineString((1 1,2 2,3 3),(4 4,5 5))\');\nmysql> SELECT ST_Length(@mls);\n+-------------------+\n| ST_Length(@mls)   |\n+-------------------+\n| 4.242640687119286 |\n+-------------------+\n\nmysql> SET @ls = ST_GeomFromText(\'LineString(1 1,2 2,3 3)\', 4326);\nmysql> SELECT ST_Length(@ls);\n+-------------------+\n| ST_Length(@ls)    |\n+-------------------+\n| 313701.9623204328 |\n+-------------------+\nmysql> SELECT ST_Length(@ls, \'metre\');\n+-------------------------+\n| ST_Length(@ls, \'metre\') |\n+-------------------------+\n|       313701.9623204328 |\n+-------------------------+\nmysql> SELECT ST_Length(@ls, \'foot\');\n+------------------------+\n| ST_Length(@ls, \'foot\') |\n+------------------------+\n|     1029205.9131247795 |\n+------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html'),(328,'ST_NUMPOINTS',28,'ST_NumPoints(ls)\n\nReturns the number of Point objects in the LineString value ls.\n\nST_NumPoints() handles its arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_NumPoints(ST_GeomFromText(@ls));\n+------------------------------------+\n| ST_NumPoints(ST_GeomFromText(@ls)) |\n+------------------------------------+\n|                                  3 |\n+------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html'),(329,'ST_POINTN',28,'ST_PointN(ls, N)\n\nReturns the N-th Point in the Linestring value ls. Points are numbered\nbeginning with 1.\n\nST_PointN() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_AsText(ST_PointN(ST_GeomFromText(@ls),2));\n+----------------------------------------------+\n| ST_AsText(ST_PointN(ST_GeomFromText(@ls),2)) |\n+----------------------------------------------+\n| POINT(2 2)                                   |\n+----------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html'),(330,'ST_STARTPOINT',28,'ST_StartPoint(ls)\n\nReturns the Point that is the start point of the LineString value ls.\n\nST_StartPoint() handles its arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_AsText(ST_StartPoint(ST_GeomFromText(@ls)));\n+------------------------------------------------+\n| ST_AsText(ST_StartPoint(ST_GeomFromText(@ls))) |\n+------------------------------------------------+\n| POINT(1 1)                                     |\n+------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html'),(331,'ST_AREA',29,'ST_Area({poly|mpoly})\n\nReturns a double-precision number indicating the area of the Polygon or\nMultiPolygon argument, as measured in its spatial reference system.\n\nAs of MySQL 8.0.13, ST_Area() handles its arguments as described in the\nintroduction to this section, with these exceptions:\n\no If the geometry is geometrically invalid, either the result is an\n  undefined area (that is, it can be any number), or an error occurs.\n\no If the geometry is valid but is not a Polygon or MultiPolygon object,\n  an ER_UNEXPECTED_GEOMETRY_TYPE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_unexpected_geometry_type) error occurs.\n\no If the geometry is a valid Polygon in a Cartesian SRS, the result is\n  the Cartesian area of the polygon.\n\no If the geometry is a valid MultiPolygon in a Cartesian SRS, the\n  result is the sum of the Cartesian area of the polygons.\n\no If the geometry is a valid Polygon in a geographic SRS, the result is\n  the geodetic area of the polygon in that SRS, in square meters.\n\no If the geometry is a valid MultiPolygon in a geographic SRS, the\n  result is the sum of geodetic area of the polygons in that SRS, in\n  square meters.\n\no If an area computation results in +inf, an ER_DATA_OUT_OF_RANGE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_data_out_of_range) error occurs.\n\no If the geometry has a geographic SRS with a longitude or latitude\n  that is out of range, an error occurs:\n\n  o If a longitude value is not in the range (−180, 180], an\n    ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_longitude_out_of_range) error\n    occurs (ER_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_longitude_out_of_range) prior to MySQL 8.0.12).\n\n  o If a latitude value is not in the range [−90, 90], an\n    ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_latitude_out_of_range) error occurs\n    (ER_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_latitude_out_of_range) prior to MySQL 8.0.12).\n\n  Ranges shown are in degrees. The exact range limits deviate slightly\n  due to floating-point arithmetic.\n\nPrior to MySQL 8.0.13, ST_Area() handles its arguments as described in\nthe introduction to this section, with these exceptions:\n\no For arguments of dimension 0 or 1, the result is 0.\n\no If a geometry is empty, the return value is 0 rather than NULL.\n\no For a geometry collection, the result is the sum of the area values\n  of all components. If the geometry collection is empty, its area is\n  returned as 0.\n\no If the geometry has an SRID value for a geographic spatial reference\n  system (SRS), an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n       \'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))\';\nmysql> SELECT ST_Area(ST_GeomFromText(@poly));\n+---------------------------------+\n| ST_Area(ST_GeomFromText(@poly)) |\n+---------------------------------+\n|                               4 |\n+---------------------------------+\n\nmysql> SET @mpoly =\n       \'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))\';\nmysql> SELECT ST_Area(ST_GeomFromText(@mpoly));\n+----------------------------------+\n| ST_Area(ST_GeomFromText(@mpoly)) |\n+----------------------------------+\n|                                8 |\n+----------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html'),(332,'ST_CENTROID',29,'ST_Centroid({poly|mpoly})\n\nReturns the mathematical centroid for the Polygon or MultiPolygon\nargument as a Point. The result is not guaranteed to be on the\nMultiPolygon.\n\nThis function processes geometry collections by computing the centroid\npoint for components of highest dimension in the collection. Such\ncomponents are extracted and made into a single MultiPolygon,\nMultiLineString, or MultiPoint for centroid computation.\n\nST_Centroid() handles its arguments as described in the introduction to\nthis section, with these exceptions:\n\no The return value is NULL for the additional condition that the\n  argument is an empty geometry collection.\n\no If the geometry has an SRID value for a geographic spatial reference\n  system (SRS), an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n       ST_GeomFromText(\'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))\');\nmysql> SELECT ST_GeometryType(@poly),ST_AsText(ST_Centroid(@poly));\n+------------------------+--------------------------------------------+\n| ST_GeometryType(@poly) | ST_AsText(ST_Centroid(@poly))              |\n+------------------------+--------------------------------------------+\n| POLYGON                | POINT(4.958333333333333 4.958333333333333) |\n+------------------------+--------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html'),(333,'ST_EXTERIORRING',29,'ST_ExteriorRing(poly)\n\nReturns the exterior ring of the Polygon value poly as a LineString.\n\nST_ExteriorRing() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n       \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly)));\n+----------------------------------------------------+\n| ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly))) |\n+----------------------------------------------------+\n| LINESTRING(0 0,0 3,3 3,3 0,0 0)                    |\n+----------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html'),(334,'ST_INTERIORRINGN',29,'ST_InteriorRingN(poly, N)\n\nReturns the N-th interior ring for the Polygon value poly as a\nLineString. Rings are numbered beginning with 1.\n\nST_InteriorRingN() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n       \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1));\n+-------------------------------------------------------+\n| ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) |\n+-------------------------------------------------------+\n| LINESTRING(1 1,1 2,2 2,2 1,1 1)                       |\n+-------------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html'),(335,'ST_NUMINTERIORRINGS',29,'ST_NumInteriorRing(poly), ST_NumInteriorRings(poly)\n\nReturns the number of interior rings in the Polygon value poly.\n\nST_NumInteriorRing() and ST_NuminteriorRings() handle their arguments\nas described in the introduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n       \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_NumInteriorRings(ST_GeomFromText(@poly));\n+---------------------------------------------+\n| ST_NumInteriorRings(ST_GeomFromText(@poly)) |\n+---------------------------------------------+\n|                                           1 |\n+---------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-polygon-property-functions.html'),(336,'ST_GEOMETRYN',30,'ST_GeometryN(gc, N)\n\nReturns the N-th geometry in the GeometryCollection value gc.\nGeometries are numbered beginning with 1.\n\nST_GeometryN() handles its arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-geometrycollection-property-functions.html\n\n','mysql> SET @gc = \'GeometryCollection(Point(1 1),LineString(2 2, 3 3))\';\nmysql> SELECT ST_AsText(ST_GeometryN(ST_GeomFromText(@gc),1));\n+-------------------------------------------------+\n| ST_AsText(ST_GeometryN(ST_GeomFromText(@gc),1)) |\n+-------------------------------------------------+\n| POINT(1 1)                                      |\n+-------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-geometrycollection-property-functions.html'),(337,'ST_NUMGEOMETRIES',30,'ST_NumGeometries(gc)\n\nReturns the number of geometries in the GeometryCollection value gc.\n\nST_NumGeometries() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gis-geometrycollection-property-functions.html\n\n','mysql> SET @gc = \'GeometryCollection(Point(1 1),LineString(2 2, 3 3))\';\nmysql> SELECT ST_NumGeometries(ST_GeomFromText(@gc));\n+----------------------------------------+\n| ST_NumGeometries(ST_GeomFromText(@gc)) |\n+----------------------------------------+\n|                                      2 |\n+----------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/gis-geometrycollection-property-functions.html'),(338,'ST_BUFFER',30,'ST_Buffer(g, d [, strategy1 [, strategy2 [, strategy3]]])\n\nReturns a geometry that represents all points whose distance from the\ngeometry value g is less than or equal to a distance of d. The result\nis in the same SRS as the geometry argument.\n\nIf the geometry argument is empty, ST_Buffer() returns an empty\ngeometry.\n\nIf the distance is 0, ST_Buffer() returns the geometry argument\nunchanged:\n\nmysql> SET @pt = ST_GeomFromText(\'POINT(0 0)\');\nmysql> SELECT ST_AsText(ST_Buffer(@pt, 0));\n+------------------------------+\n| ST_AsText(ST_Buffer(@pt, 0)) |\n+------------------------------+\n| POINT(0 0)                   |\n+------------------------------+\n\nIf the geometry argument is in a Cartesian SRS:\n\no ST_Buffer() supports negative distances for Polygon and MultiPolygon\n  values, and for geometry collections containing Polygon or\n  MultiPolygon values.\n\no If the result is reduced so much that it disappears, the result is an\n  empty geometry.\n\no An ER_WRONG_ARGUMENTS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_wrong_arguments) error occurs for ST_Buffer() with a\n  negative distance for Point, MultiPoint, LineString, and\n  MultiLineString values, and for geometry collections not containing\n  any Polygon or MultiPolygon values.\n\nIf the geometry argument is in a geographic SRS:\n\no Prior to MySQL 8.0.26, an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs.\n\no As of MySQL 8.0.26, Point geometries in a geographic SRS are\n  permitted. For non-Point geometries, an\n  ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error still\n  occurs.\n\nFor MySQL versions that permit geographic Point geometries:\n\no If the distance is not negative and no strategies are specified, the\n  function returns the geographic buffer of the Point in its SRS. The\n  distance argument must be in the SRS distance unit (currently always\n  meters).\n\no If the distance is negative or any strategy (except NULL) is\n  specified, an ER_WRONG_ARGUMENTS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_wrong_arguments) error occurs.\n\nST_Buffer() permits up to three optional strategy arguments following\nthe distance argument. Strategies influence buffer computation. These\narguments are byte string values produced by the ST_Buffer_Strategy()\nfunction, to be used for point, join, and end strategies:\n\no Point strategies apply to Point and MultiPoint geometries. If no\n  point strategy is specified, the default is\n  ST_Buffer_Strategy(\'point_circle\', 32).\n\no Join strategies apply to LineString, MultiLineString, Polygon, and\n  MultiPolygon geometries. If no join strategy is specified, the\n  default is ST_Buffer_Strategy(\'join_round\', 32).\n\no End strategies apply to LineString and MultiLineString geometries. If\n  no end strategy is specified, the default is\n  ST_Buffer_Strategy(\'end_round\', 32).\n\nUp to one strategy of each type may be specified, and they may be given\nin any order.\n\nIf the buffer strategies are invalid, an ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_wrong_arguments) error occurs. Strategies are invalid\nunder any of these circumstances:\n\no Multiple strategies of a given type (point, join, or end) are\n  specified.\n\no A value that is not a strategy (such as an arbitrary binary string or\n  a number) is passed as a strategy.\n\no A Point strategy is passed and the geometry contains no Point or\n  MultiPoint values.\n\no An end or join strategy is passed and the geometry contains no\n  LineString, Polygon, MultiLinestring or MultiPolygon values.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','mysql> SET @pt = ST_GeomFromText(\'POINT(0 0)\');\nmysql> SET @pt_strategy = ST_Buffer_Strategy(\'point_square\');\nmysql> SELECT ST_AsText(ST_Buffer(@pt, 2, @pt_strategy));\n+--------------------------------------------+\n| ST_AsText(ST_Buffer(@pt, 2, @pt_strategy)) |\n+--------------------------------------------+\n| POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2))       |\n+--------------------------------------------+\n\nmysql> SET @ls = ST_GeomFromText(\'LINESTRING(0 0,0 5,5 5)\');\nmysql> SET @end_strategy = ST_Buffer_Strategy(\'end_flat\');\nmysql> SET @join_strategy = ST_Buffer_Strategy(\'join_round\', 10);\nmysql> SELECT ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))\n+---------------------------------------------------------------+\n| ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))   |\n+---------------------------------------------------------------+\n| POLYGON((5 5,5 10,0 10,-3.5355339059327373 8.535533905932738, |\n| -5 5,-5 0,0 0,5 0,5 5))                                       |\n+---------------------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(339,'ST_BUFFER_STRATEGY',30,'ST_Buffer_Strategy(strategy [, points_per_circle])\n\nThis function returns a strategy byte string for use with ST_Buffer()\nto influence buffer computation.\n\nInformation about strategies is available at Boost.org\n(http://www.boost.org).\n\nThe first argument must be a string indicating a strategy option:\n\no For point strategies, permitted values are \'point_circle\' and\n  \'point_square\'.\n\no For join strategies, permitted values are \'join_round\' and\n  \'join_miter\'.\n\no For end strategies, permitted values are \'end_round\' and \'end_flat\'.\n\nIf the first argument is \'point_circle\', \'join_round\', \'join_miter\', or\n\'end_round\', the points_per_circle argument must be given as a positive\nnumeric value. The maximum points_per_circle value is the value of the\nmax_points_in_geometry system variable.\n\nFor examples, see the description of ST_Buffer().\n\nST_Buffer_Strategy() handles its arguments as described in the\nintroduction to this section, with these exceptions:\n\no If any argument is invalid, an ER_WRONG_ARGUMENTS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_wrong_arguments) error occurs.\n\no If the first argument is \'point_square\' or \'end_flat\', the\n  points_per_circle argument must not be given or an ER_WRONG_ARGUMENTS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_wrong_arguments) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(340,'ST_CONVEXHULL',30,'ST_ConvexHull(g)\n\nReturns a geometry that represents the convex hull of the geometry\nvalue g.\n\nThis function computes a geometry\'s convex hull by first checking\nwhether its vertex points are colinear. The function returns a linear\nhull if so, a polygon hull otherwise. This function processes geometry\ncollections by extracting all vertex points of all components of the\ncollection, creating a MultiPoint value from them, and computing its\nconvex hull.\n\nST_ConvexHull() handles its arguments as described in the introduction\nto this section, with this exception:\n\no The return value is NULL for the additional condition that the\n  argument is an empty geometry collection.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','mysql> SET @g = \'MULTIPOINT(5 0,25 0,15 10,15 25)\';\nmysql> SELECT ST_AsText(ST_ConvexHull(ST_GeomFromText(@g)));\n+-----------------------------------------------+\n| ST_AsText(ST_ConvexHull(ST_GeomFromText(@g))) |\n+-----------------------------------------------+\n| POLYGON((5 0,25 0,15 25,5 0))                 |\n+-----------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(341,'ST_DIFFERENCE',30,'ST_Difference(g1, g2)\n\nReturns a geometry that represents the point set difference of the\ngeometry values g1 and g2. The result is in the same SRS as the\ngeometry arguments.\n\nAs of MySQL 8.0.26, ST_Difference() permits arguments in either a\nCartesian or a geographic SRS. Prior to MySQL 8.0.26, ST_Difference()\npermits arguments in a Cartesian SRS only; for arguments in a\ngeographic SRS, an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_not_implemented_for_geographic_srs) error occurs.\n\nST_Difference() handles its arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','mysql> SET @g1 = Point(1,1), @g2 = Point(2,2);\nmysql> SELECT ST_AsText(ST_Difference(@g1, @g2));\n+------------------------------------+\n| ST_AsText(ST_Difference(@g1, @g2)) |\n+------------------------------------+\n| POINT(1 1)                         |\n+------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(342,'ST_INTERSECTION',30,'ST_Intersection(g1, g2)\n\nReturns a geometry that represents the point set intersection of the\ngeometry values g1 and g2. The result is in the same SRS as the\ngeometry arguments.\n\nAs of MySQL 8.0.27, ST_Intersection() permits arguments in either a\nCartesian or a geographic SRS. Prior to MySQL 8.0.27, ST_Intersection()\npermits arguments in a Cartesian SRS only; for arguments in a\ngeographic SRS, an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_not_implemented_for_geographic_srs) error occurs.\n\nST_Intersection() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'LineString(1 1, 3 3)\');\nmysql> SET @g2 = ST_GeomFromText(\'LineString(1 3, 3 1)\');\nmysql> SELECT ST_AsText(ST_Intersection(@g1, @g2));\n+--------------------------------------+\n| ST_AsText(ST_Intersection(@g1, @g2)) |\n+--------------------------------------+\n| POINT(2 2)                           |\n+--------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(343,'ST_LINEINTERPOLATEPOINT',30,'ST_LineInterpolatePoint(ls, fractional_distance)\n\nThis function takes a LineString geometry and a fractional distance in\nthe range [0.0, 1.0] and returns the Point along the LineString at the\ngiven fraction of the distance from its start point to its endpoint. It\ncan be used to answer questions such as which Point lies halfway along\nthe road described by the geometry argument.\n\nThe function is implemented for LineString geometries in all spatial\nreference systems, both Cartesian and geographic.\n\nIf the fractional_distance argument is 1.0, the result may not be\nexactly the last point of the LineString argument but a point close to\nit due to numerical inaccuracies in approximate-value computations.\n\nA related function, ST_LineInterpolatePoints(), takes similar arguments\nbut returns a MultiPoint consisting of Point values along the\nLineString at each fraction of the distance from its start point to its\nendpoint. For examples of both functions, see the\nST_LineInterpolatePoints() description.\n\nST_LineInterpolatePoint() handles its arguments as described in the\nintroduction to this section, with these exceptions:\n\no If the geometry argument is not a LineString, an\n  ER_UNEXPECTED_GEOMETRY_TYPE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_unexpected_geometry_type) error occurs.\n\no If the fractional distance argument is outside the range [0.0, 1.0],\n  an ER_DATA_OUT_OF_RANGE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_data_out_of_range) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(344,'ST_LINEINTERPOLATEPOINTS',30,'ST_LineInterpolatePoints(ls, fractional_distance)\n\nThis function takes a LineString geometry and a fractional distance in\nthe range (0.0, 1.0] and returns the MultiPoint consisting of the\nLineString start point, plus Point values along the LineString at each\nfraction of the distance from its start point to its endpoint. It can\nbe used to answer questions such as which Point values lie every 10% of\nthe way along the road described by the geometry argument.\n\nThe function is implemented for LineString geometries in all spatial\nreference systems, both Cartesian and geographic.\n\nIf the fractional_distance argument divides 1.0 with zero remainder the\nresult may not contain the last point of the LineString argument but a\npoint close to it due to numerical inaccuracies in approximate-value\ncomputations.\n\nA related function, ST_LineInterpolatePoint(), takes similar arguments\nbut returns the Point along the LineString at the given fraction of the\ndistance from its start point to its endpoint.\n\nST_LineInterpolatePoints() handles its arguments as described in the\nintroduction to this section, with these exceptions:\n\no If the geometry argument is not a LineString, an\n  ER_UNEXPECTED_GEOMETRY_TYPE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_unexpected_geometry_type) error occurs.\n\no If the fractional distance argument is outside the range [0.0, 1.0],\n  an ER_DATA_OUT_OF_RANGE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_data_out_of_range) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','mysql> SET @ls1 = ST_GeomFromText(\'LINESTRING(0 0,0 5,5 5)\');\nmysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, .5));\n+----------------------------------------------+\n| ST_AsText(ST_LineInterpolatePoint(@ls1, .5)) |\n+----------------------------------------------+\n| POINT(0 5)                                   |\n+----------------------------------------------+\nmysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, .75));\n+-----------------------------------------------+\n| ST_AsText(ST_LineInterpolatePoint(@ls1, .75)) |\n+-----------------------------------------------+\n| POINT(2.5 5)                                  |\n+-----------------------------------------------+\nmysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, 1));\n+---------------------------------------------+\n| ST_AsText(ST_LineInterpolatePoint(@ls1, 1)) |\n+---------------------------------------------+\n| POINT(5 5)                                  |\n+---------------------------------------------+\nmysql> SELECT ST_AsText(ST_LineInterpolatePoints(@ls1, .25));\n+------------------------------------------------+\n| ST_AsText(ST_LineInterpolatePoints(@ls1, .25)) |\n+------------------------------------------------+\n| MULTIPOINT((0 2.5),(0 5),(2.5 5),(5 5))        |\n+------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(345,'ST_POINTATDISTANCE',30,'ST_PointAtDistance(ls, distance)\n\nThis function takes a LineString geometry and a distance in the range\n[0.0, ST_Length(ls)] measured in the unit of the spatial reference\nsystem (SRS) of the LineString, and returns the Point along the\nLineString at that distance from its start point. It can be used to\nanswer questions such as which Point value is 400 meters from the start\nof the road described by the geometry argument.\n\nThe function is implemented for LineString geometries in all spatial\nreference systems, both Cartesian and geographic.\n\nST_PointAtDistance() handles its arguments as described in the\nintroduction to this section, with these exceptions:\n\no If the geometry argument is not a LineString, an\n  ER_UNEXPECTED_GEOMETRY_TYPE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_unexpected_geometry_type) error occurs.\n\no If the fractional distance argument is outside the range [0.0,\n  ST_Length(ls)], an ER_DATA_OUT_OF_RANGE\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_data_out_of_range) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(346,'ST_SYMDIFFERENCE',30,'ST_SymDifference(g1, g2)\n\nReturns a geometry that represents the point set symmetric difference\nof the geometry values g1 and g2, which is defined as:\n\ng1 symdifference g2 := (g1 union g2) difference (g1 intersection g2)\n\nOr, in function call notation:\n\nST_SymDifference(g1, g2) = ST_Difference(ST_Union(g1, g2), ST_Intersection(g1, g2))\n\nThe result is in the same SRS as the geometry arguments.\n\nAs of MySQL 8.0.27, ST_SymDifference() permits arguments in either a\nCartesian or a geographic SRS. Prior to MySQL 8.0.27,\nST_SymDifference() permits arguments in a Cartesian SRS only; for\narguments in a geographic SRS, an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_not_implemented_for_geographic_srs) error occurs.\n\nST_SymDifference() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'MULTIPOINT(5 0,15 10,15 25)\');\nmysql> SET @g2 = ST_GeomFromText(\'MULTIPOINT(1 1,15 10,15 25)\');\nmysql> SELECT ST_AsText(ST_SymDifference(@g1, @g2));\n+---------------------------------------+\n| ST_AsText(ST_SymDifference(@g1, @g2)) |\n+---------------------------------------+\n| MULTIPOINT((1 1),(5 0))               |\n+---------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(347,'ST_TRANSFORM',30,'ST_Transform(g, target_srid)\n\nTransforms a geometry from one spatial reference system (SRS) to\nanother. The return value is a geometry of the same type as the input\ngeometry with all coordinates transformed to the target SRID,\ntarget_srid. Prior to MySQL 8.0.30, transformation support was limited\nto geographic SRSs (unless the SRID of the geometry argument was the\nsame as the target SRID value, in which case the return value was the\ninput geometry for any valid SRS), and this function did not support\nCartesian SRSs. Beginning with MySQL 8.0.30, support is provided for\nthe Popular Visualisation Pseudo Mercator (EPSG 1024) projection\nmethod, used for WGS 84 Pseudo-Mercator (SRID 3857). In MySQL 8.0.32\nand later, support is extended to all SRSs defined by EPSG except for\nthose listed here:\n\no EPSG 1042 Krovak Modified\n\no EPSG 1043 Krovak Modified (North Orientated)\n\no EPSG 9816 Tunisia Mining Grid\n\no EPSG 9826 Lambert Conic Conformal (West Orientated)\n\nST_Transform() handles its arguments as described in the introduction\nto this section, with these exceptions:\n\no Geometry arguments that have an SRID value for a geographic SRS do\n  not produce an error.\n\no If the geometry or target SRID argument has an SRID value that refers\n  to an undefined spatial reference system (SRS), an ER_SRS_NOT_FOUND\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_srs_not_found) error occurs.\n\no If the geometry is in an SRS that ST_Transform() cannot transform\n  from, an ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_transform_source_srs_not_supported) error occurs.\n\no If the target SRID is in an SRS that ST_Transform() cannot transform\n  to, an ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_transform_target_srs_not_supported) error occurs.\n\no If the geometry is in an SRS that is not WGS 84 and has no TOWGS84\n  clause, an ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_transform_source_srs_missing_towgs84) error occurs.\n\no If the target SRID is in an SRS that is not WGS 84 and has no TOWGS84\n  clause, an ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_transform_target_srs_missing_towgs84) error occurs.\n\nST_SRID(g, target_srid) and ST_Transform(g, target_srid) differ as\nfollows:\n\no ST_SRID() changes the geometry SRID value without transforming its\n  coordinates.\n\no ST_Transform() transforms the geometry coordinates in addition to\n  changing its SRID value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','mysql> SET @p = ST_GeomFromText(\'POINT(52.381389 13.064444)\', 4326);\nmysql> SELECT ST_AsText(@p);\n+----------------------------+\n| ST_AsText(@p)              |\n+----------------------------+\n| POINT(52.381389 13.064444) |\n+----------------------------+\nmysql> SET @p = ST_Transform(@p, 4230);\nmysql> SELECT ST_AsText(@p);\n+---------------------------------------------+\n| ST_AsText(@p)                               |\n+---------------------------------------------+\n| POINT(52.38208611407426 13.065520672345304) |\n+---------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(348,'ST_UNION',30,'ST_Union(g1, g2)\n\nReturns a geometry that represents the point set union of the geometry\nvalues g1 and g2. The result is in the same SRS as the geometry\narguments.\n\nAs of MySQL 8.0.26, ST_Union() permits arguments in either a Cartesian\nor a geographic SRS. Prior to MySQL 8.0.26, ST_Union() permits\narguments in a Cartesian SRS only; for arguments in a geographic SRS,\nan ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_not_implemented_for_geographic_srs) error occurs.\n\nST_Union() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'LineString(1 1, 3 3)\');\nmysql> SET @g2 = ST_GeomFromText(\'LineString(1 3, 3 1)\');\nmysql> SELECT ST_AsText(ST_Union(@g1, @g2));\n+--------------------------------------+\n| ST_AsText(ST_Union(@g1, @g2))        |\n+--------------------------------------+\n| MULTILINESTRING((1 1,3 3),(1 3,3 1)) |\n+--------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html'),(349,'ST_CONTAINS',31,'ST_Contains(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 completely contains g2. This\ntests the opposite relationship as ST_Within().\n\nST_Contains() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(350,'ST_CROSSES',31,'ST_Crosses(g1, g2)\n\nTwo geometries spatially cross if their spatial relation has the\nfollowing properties:\n\no Unless g1 and g2 are both of dimension 1: g1 crosses g2 if the\n  interior of g2 has points in common with the interior of g1, but g2\n  does not cover the entire interior of g1.\n\no If both g1 and g2 are of dimension 1: If the lines cross each other\n  in a finite number of points (that is, no common line segments, only\n  single points in common).\n\nThis function returns 1 or 0 to indicate whether g1 spatially crosses\ng2.\n\nST_Crosses() handles its arguments as described in the introduction to\nthis section except that the return value is NULL for these additional\nconditions:\n\no g1 is of dimension 2 (Polygon or MultiPolygon).\n\no g2 is of dimension 1 (Point or MultiPoint).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(351,'ST_DISJOINT',31,'ST_Disjoint(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 is spatially disjoint from (does\nnot intersect) g2.\n\nST_Disjoint() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(352,'ST_DISTANCE',31,'ST_Distance(g1, g2 [, unit])\n\nReturns the distance between g1 and g2, measured in the length unit of\nthe spatial reference system (SRS) of the geometry arguments, or in the\nunit of the optional unit argument if that is specified.\n\nThis function processes geometry collections by returning the shortest\ndistance among all combinations of the components of the two geometry\narguments.\n\nST_Distance() handles its geometry arguments as described in the\nintroduction to this section, with these exceptions:\n\no ST_Distance() detects arguments in a geographic (ellipsoidal) spatial\n  reference system and returns the geodetic distance on the ellipsoid.\n  As of MySQL 8.0.18, ST_Distance() supports distance calculations for\n  geographic SRS arguments of all geometry types. Prior to MySQL\n  8.0.18, the only permitted geographic argument types are Point and\n  Point, or Point and MultiPoint (in any argument order). If called\n  with other geometry type argument combinations in a geographic SRS,\n  an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs.\n\no If any argument is geometrically invalid, either the result is an\n  undefined distance (that is, it can be any number), or an error\n  occurs.\n\no If an intermediate or final result produces NaN or a negative number,\n  an ER_GIS_INVALID_DATA\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_gis_invalid_data) error occurs.\n\nAs of MySQL 8.0.14, ST_Distance() permits an optional unit argument\nthat specifies the linear unit for the returned distance value.\nST_Distance() handles its unit argument as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'POINT(1 1)\');\nmysql> SET @g2 = ST_GeomFromText(\'POINT(2 2)\');\nmysql> SELECT ST_Distance(@g1, @g2);\n+-----------------------+\n| ST_Distance(@g1, @g2) |\n+-----------------------+\n|    1.4142135623730951 |\n+-----------------------+\n\nmysql> SET @g1 = ST_GeomFromText(\'POINT(1 1)\', 4326);\nmysql> SET @g2 = ST_GeomFromText(\'POINT(2 2)\', 4326);\nmysql> SELECT ST_Distance(@g1, @g2);\n+-----------------------+\n| ST_Distance(@g1, @g2) |\n+-----------------------+\n|     156874.3859490455 |\n+-----------------------+\nmysql> SELECT ST_Distance(@g1, @g2, \'metre\');\n+--------------------------------+\n| ST_Distance(@g1, @g2, \'metre\') |\n+--------------------------------+\n|              156874.3859490455 |\n+--------------------------------+\nmysql> SELECT ST_Distance(@g1, @g2, \'foot\');\n+-------------------------------+\n| ST_Distance(@g1, @g2, \'foot\') |\n+-------------------------------+\n|             514679.7439273146 |\n+-------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(353,'ST_EQUALS',31,'ST_Equals(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 is spatially equal to g2.\n\nST_Equals() handles its arguments as described in the introduction to\nthis section, except that it does not return NULL for empty geometry\narguments.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','mysql> SET @g1 = Point(1,1), @g2 = Point(2,2);\nmysql> SELECT ST_Equals(@g1, @g1), ST_Equals(@g1, @g2);\n+---------------------+---------------------+\n| ST_Equals(@g1, @g1) | ST_Equals(@g1, @g2) |\n+---------------------+---------------------+\n|                   1 |                   0 |\n+---------------------+---------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(354,'ST_FRECHETDISTANCE',31,'ST_FrechetDistance(g1, g2 [, unit])\n\nReturns the discrete Fréchet distance between two geometries,\nreflecting how similar the geometries are. The result is a\ndouble-precision number measured in the length unit of the spatial\nreference system (SRS) of the geometry arguments, or in the length unit\nof the unit argument if that argument is given.\n\nThis function implements the discrete Fréchet distance, which means it\nis restricted to distances between the points of the geometries. For\nexample, given two LineString arguments, only the points explicitly\nmentioned in the geometries are considered. Points on the line segments\nbetween these points are not considered.\n\nST_FrechetDistance() handles its geometry arguments as described in the\nintroduction to this section, with these exceptions:\n\no The geometries may have a Cartesian or geographic SRS, but only\n  LineString values are supported. If the arguments are in the same\n  Cartesian or geographic SRS, but either is not a LineString, an\n  ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_cartesian_srs) or\n  ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs,\n  depending on the SRS type.\n\nST_FrechetDistance() handles its optional unit argument as described in\nthe introduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','mysql> SET @ls1 = ST_GeomFromText(\'LINESTRING(0 0,0 5,5 5)\');\nmysql> SET @ls2 = ST_GeomFromText(\'LINESTRING(0 1,0 6,3 3,5 6)\');\nmysql> SELECT ST_FrechetDistance(@ls1, @ls2);\n+--------------------------------+\n| ST_FrechetDistance(@ls1, @ls2) |\n+--------------------------------+\n|             2.8284271247461903 |\n+--------------------------------+\n\nmysql> SET @ls1 = ST_GeomFromText(\'LINESTRING(0 0,0 5,5 5)\', 4326);\nmysql> SET @ls2 = ST_GeomFromText(\'LINESTRING(0 1,0 6,3 3,5 6)\', 4326);\nmysql> SELECT ST_FrechetDistance(@ls1, @ls2);\n+--------------------------------+\n| ST_FrechetDistance(@ls1, @ls2) |\n+--------------------------------+\n|              313421.1999416798 |\n+--------------------------------+\nmysql> SELECT ST_FrechetDistance(@ls1, @ls2, \'foot\');\n+----------------------------------------+\n| ST_FrechetDistance(@ls1, @ls2, \'foot\') |\n+----------------------------------------+\n|                     1028284.7767115477 |\n+----------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(355,'ST_HAUSDORFFDISTANCE',31,'ST_HausdorffDistance(g1, g2 [, unit])\n\nReturns the discrete Hausdorff distance between two geometries,\nreflecting how similar the geometries are. The result is a\ndouble-precision number measured in the length unit of the spatial\nreference system (SRS) of the geometry arguments, or in the length unit\nof the unit argument if that argument is given.\n\nThis function implements the discrete Hausdorff distance, which means\nit is restricted to distances between the points of the geometries. For\nexample, given two LineString arguments, only the points explicitly\nmentioned in the geometries are considered. Points on the line segments\nbetween these points are not considered.\n\nST_HausdorffDistance() handles its geometry arguments as described in\nthe introduction to this section, with these exceptions:\n\no If the geometry arguments are in the same Cartesian or geographic\n  SRS, but are not in a supported combination, an\n  ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_cartesian_srs) or\n  ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs,\n  depending on the SRS type. These combinations are supported:\n\n  o LineString and LineString\n\n  o Point and MultiPoint\n\n  o LineString and MultiLineString\n\n  o MultiPoint and MultiPoint\n\n  o MultiLineString and MultiLineString\n\nST_HausdorffDistance() handles its optional unit argument as described\nin the introduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','mysql> SET @ls1 = ST_GeomFromText(\'LINESTRING(0 0,0 5,5 5)\');\nmysql> SET @ls2 = ST_GeomFromText(\'LINESTRING(0 1,0 6,3 3,5 6)\');\nmysql> SELECT ST_HausdorffDistance(@ls1, @ls2);\n+----------------------------------+\n| ST_HausdorffDistance(@ls1, @ls2) |\n+----------------------------------+\n|                                1 |\n+----------------------------------+\n\nmysql> SET @ls1 = ST_GeomFromText(\'LINESTRING(0 0,0 5,5 5)\', 4326);\nmysql> SET @ls2 = ST_GeomFromText(\'LINESTRING(0 1,0 6,3 3,5 6)\', 4326);\nmysql> SELECT ST_HausdorffDistance(@ls1, @ls2);\n+----------------------------------+\n| ST_HausdorffDistance(@ls1, @ls2) |\n+----------------------------------+\n|               111319.49079326246 |\n+----------------------------------+\nmysql> SELECT ST_HausdorffDistance(@ls1, @ls2, \'foot\');\n+------------------------------------------+\n| ST_HausdorffDistance(@ls1, @ls2, \'foot\') |\n+------------------------------------------+\n|                        365221.4264870815 |\n+------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(356,'ST_INTERSECTS',31,'ST_Intersects(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 spatially intersects g2.\n\nST_Intersects() handles its arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(357,'ST_OVERLAPS',31,'ST_Overlaps(g1, g2)\n\nTwo geometries spatially overlap if they intersect and their\nintersection results in a geometry of the same dimension but not equal\nto either of the given geometries.\n\nThis function returns 1 or 0 to indicate whether g1 spatially overlaps\ng2.\n\nST_Overlaps() handles its arguments as described in the introduction to\nthis section except that the return value is NULL for the additional\ncondition that the dimensions of the two geometries are not equal.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(358,'ST_TOUCHES',31,'ST_Touches(g1, g2)\n\nTwo geometries spatially touch if their interiors do not intersect, but\nthe boundary of one of the geometries intersects either the boundary or\nthe interior of the other.\n\nThis function returns 1 or 0 to indicate whether g1 spatially touches\ng2.\n\nST_Touches() handles its arguments as described in the introduction to\nthis section except that the return value is NULL for the additional\ncondition that both geometries are of dimension 0 (Point or\nMultiPoint).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(359,'ST_WITHIN',31,'ST_Within(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 is spatially within g2. This\ntests the opposite relationship as ST_Contains().\n\nST_Within() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html'),(360,'MBRCONTAINS',32,'MBRContains(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangle of g1\ncontains the minimum bounding rectangle of g2. This tests the opposite\nrelationship as MBRWithin().\n\nMBRContains() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nmysql> SET @g2 = ST_GeomFromText(\'Point(1 1)\');\nmysql> SELECT MBRContains(@g1,@g2), MBRWithin(@g2,@g1);\n+----------------------+--------------------+\n| MBRContains(@g1,@g2) | MBRWithin(@g2,@g1) |\n+----------------------+--------------------+\n|                    1 |                  1 |\n+----------------------+--------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html'),(361,'MBRCOVEREDBY',32,'MBRCoveredBy(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangle of g1\nis covered by the minimum bounding rectangle of g2. This tests the\nopposite relationship as MBRCovers().\n\nMBRCoveredBy() handles its arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nmysql> SET @g2 = ST_GeomFromText(\'Point(1 1)\');\nmysql> SELECT MBRCovers(@g1,@g2), MBRCoveredby(@g1,@g2);\n+--------------------+-----------------------+\n| MBRCovers(@g1,@g2) | MBRCoveredby(@g1,@g2) |\n+--------------------+-----------------------+\n|                  1 |                     0 |\n+--------------------+-----------------------+\nmysql> SELECT MBRCovers(@g2,@g1), MBRCoveredby(@g2,@g1);\n+--------------------+-----------------------+\n| MBRCovers(@g2,@g1) | MBRCoveredby(@g2,@g1) |\n+--------------------+-----------------------+\n|                  0 |                     1 |\n+--------------------+-----------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html'),(362,'MBRCOVERS',32,'MBRCovers(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangle of g1\ncovers the minimum bounding rectangle of g2. This tests the opposite\nrelationship as MBRCoveredBy(). See the description of MBRCoveredBy()\nfor examples.\n\nMBRCovers() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html'),(363,'MBRDISJOINT',32,'MBRDisjoint(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangles of\nthe two geometries g1 and g2 are disjoint (do not intersect).\n\nMBRDisjoint() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html'),(364,'MBREQUALS',32,'MBREquals(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangles of\nthe two geometries g1 and g2 are the same.\n\nMBREquals() handles its arguments as described in the introduction to\nthis section, except that it does not return NULL for empty geometry\narguments.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html'),(365,'MBRINTERSECTS',32,'MBRIntersects(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangles of\nthe two geometries g1 and g2 intersect.\n\nMBRIntersects() handles its arguments as described in the introduction\nto this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html'),(366,'MBROVERLAPS',32,'MBROverlaps(g1, g2)\n\nTwo geometries spatially overlap if they intersect and their\nintersection results in a geometry of the same dimension but not equal\nto either of the given geometries.\n\nThis function returns 1 or 0 to indicate whether the minimum bounding\nrectangles of the two geometries g1 and g2 overlap.\n\nMBROverlaps() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html'),(367,'MBRTOUCHES',32,'MBRTouches(g1, g2)\n\nTwo geometries spatially touch if their interiors do not intersect, but\nthe boundary of one of the geometries intersects either the boundary or\nthe interior of the other.\n\nThis function returns 1 or 0 to indicate whether the minimum bounding\nrectangles of the two geometries g1 and g2 touch.\n\nMBRTouches() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html'),(368,'MBRWITHIN',32,'MBRWithin(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangle of g1\nis within the minimum bounding rectangle of g2. This tests the opposite\nrelationship as MBRContains().\n\nMBRWithin() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nmysql> SET @g2 = ST_GeomFromText(\'Polygon((0 0,0 5,5 5,5 0,0 0))\');\nmysql> SELECT MBRWithin(@g1,@g2), MBRWithin(@g2,@g1);\n+--------------------+--------------------+\n| MBRWithin(@g1,@g2) | MBRWithin(@g2,@g1) |\n+--------------------+--------------------+\n|                  1 |                  0 |\n+--------------------+--------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html'),(369,'ST_GEOHASH',32,'ST_GeoHash(longitude, latitude, max_length), ST_GeoHash(point,\nmax_length)\n\nReturns a geohash string in the connection character set and collation.\n\nFor the first syntax, the longitude must be a number in the range\n[−180, 180], and the latitude must be a number in the range [−90,\n90]. For the second syntax, a POINT value is required, where the X and\nY coordinates are in the valid ranges for longitude and latitude,\nrespectively.\n\nThe resulting string is no longer than max_length characters, which has\nan upper limit of 100. The string might be shorter than max_length\ncharacters because the algorithm that creates the geohash value\ncontinues until it has created a string that is either an exact\nrepresentation of the location or max_length characters, whichever\ncomes first.\n\nST_GeoHash() handles its arguments as described in the introduction to\nthis section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-geohash-functions.html\n\n','mysql> SELECT ST_GeoHash(180,0,10), ST_GeoHash(-180,-90,15);\n+----------------------+-------------------------+\n| ST_GeoHash(180,0,10) | ST_GeoHash(-180,-90,15) |\n+----------------------+-------------------------+\n| xbpbpbpbpb           | 000000000000000         |\n+----------------------+-------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-geohash-functions.html'),(370,'ST_LATFROMGEOHASH',32,'ST_LatFromGeoHash(geohash_str)\n\nReturns the latitude from a geohash string value, as a double-precision\nnumber in the range [−90, 90].\n\nThe ST_LatFromGeoHash() decoding function reads no more than 433\ncharacters from the geohash_str argument. That represents the upper\nlimit on information in the internal representation of coordinate\nvalues. Characters past the 433rd are ignored, even if they are\notherwise illegal and produce an error.\n\nST_LatFromGeoHash() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-geohash-functions.html\n\n','mysql> SELECT ST_LatFromGeoHash(ST_GeoHash(45,-20,10));\n+------------------------------------------+\n| ST_LatFromGeoHash(ST_GeoHash(45,-20,10)) |\n+------------------------------------------+\n|                                      -20 |\n+------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-geohash-functions.html'),(371,'ST_LONGFROMGEOHASH',32,'ST_LongFromGeoHash(geohash_str)\n\nReturns the longitude from a geohash string value, as a\ndouble-precision number in the range [−180, 180].\n\nThe remarks in the description of ST_LatFromGeoHash() regarding the\nmaximum number of characters processed from the geohash_str argument\nalso apply to ST_LongFromGeoHash().\n\nST_LongFromGeoHash() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-geohash-functions.html\n\n','mysql> SELECT ST_LongFromGeoHash(ST_GeoHash(45,-20,10));\n+-------------------------------------------+\n| ST_LongFromGeoHash(ST_GeoHash(45,-20,10)) |\n+-------------------------------------------+\n|                                        45 |\n+-------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-geohash-functions.html'),(372,'ST_POINTFROMGEOHASH',32,'ST_PointFromGeoHash(geohash_str, srid)\n\nReturns a POINT value containing the decoded geohash value, given a\ngeohash string value.\n\nThe X and Y coordinates of the point are the longitude in the range\n[−180, 180] and the latitude in the range [−90, 90], respectively.\n\nThe srid argument is an 32-bit unsigned integer.\n\nThe remarks in the description of ST_LatFromGeoHash() regarding the\nmaximum number of characters processed from the geohash_str argument\nalso apply to ST_PointFromGeoHash().\n\nST_PointFromGeoHash() handles its arguments as described in the\nintroduction to this section.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-geohash-functions.html\n\n','mysql> SET @gh = ST_GeoHash(45,-20,10);\nmysql> SELECT ST_AsText(ST_PointFromGeoHash(@gh,0));\n+---------------------------------------+\n| ST_AsText(ST_PointFromGeoHash(@gh,0)) |\n+---------------------------------------+\n| POINT(45 -20)                         |\n+---------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-geohash-functions.html'),(373,'ST_ASGEOJSON',32,'ST_AsGeoJSON(g [, max_dec_digits [, options]])\n\nGenerates a GeoJSON object from the geometry g. The object string has\nthe connection character set and collation.\n\nIf any argument is NULL, the return value is NULL. If any non-NULL\nargument is invalid, an error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-geojson-functions.html\n\n','mysql> SELECT ST_AsGeoJSON(ST_GeomFromText(\'POINT(11.11111 12.22222)\'),2);\n+-------------------------------------------------------------+\n| ST_AsGeoJSON(ST_GeomFromText(\'POINT(11.11111 12.22222)\'),2) |\n+-------------------------------------------------------------+\n| {\"type\": \"Point\", \"coordinates\": [11.11, 12.22]}            |\n+-------------------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-geojson-functions.html'),(374,'ST_GEOMFROMGEOJSON',32,'ST_GeomFromGeoJSON(str [, options [, srid]])\n\nParses a string str representing a GeoJSON object and returns a\ngeometry.\n\nIf any argument is NULL, the return value is NULL. If any non-NULL\nargument is invalid, an error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-geojson-functions.html\n\n','mysql> SET @json = \'{ \"type\": \"Point\", \"coordinates\": [102.0, 0.0]}\';\nmysql> SELECT ST_AsText(ST_GeomFromGeoJSON(@json));\n+--------------------------------------+\n| ST_AsText(ST_GeomFromGeoJSON(@json)) |\n+--------------------------------------+\n| POINT(0 102)                         |\n+--------------------------------------+\nmysql> SELECT ST_SRID(ST_GeomFromGeoJSON(@json));\n+------------------------------------+\n| ST_SRID(ST_GeomFromGeoJSON(@json)) |\n+------------------------------------+\n|                               4326 |\n+------------------------------------+\nmysql> SELECT ST_AsText(ST_SRID(ST_GeomFromGeoJSON(@json),0));\n+-------------------------------------------------+\n| ST_AsText(ST_SRID(ST_GeomFromGeoJSON(@json),0)) |\n+-------------------------------------------------+\n| POINT(102 0)                                    |\n+-------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-geojson-functions.html'),(375,'ST_COLLECT',32,'ST_Collect([DISTINCT] g) [over_clause]\n\nAggregates geometry values and returns a single geometry collection\nvalue. With the DISTINCT option, returns the aggregation of the\ndistinct geometry arguments.\n\nAs with other aggregate functions, GROUP BY may be used to group\narguments into subsets. ST_Collect() returns an aggregate value for\neach subset.\n\nThis function executes as a window function if over_clause is present.\nover_clause is as described in\nhttps://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html. In\ncontrast to most aggregate functions that support windowing,\nST_Collect() permits use of over_clause together with DISTINCT.\n\nST_Collect() handles its arguments as follows:\n\no NULL arguments are ignored.\n\no If all arguments are NULL or the aggregate result is empty, the\n  return value is NULL.\n\no If any geometry argument is not a syntactically well-formed geometry,\n  an ER_GIS_INVALID_DATA\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_gis_invalid_data) error occurs.\n\no If any geometry argument is a syntactically well-formed geometry in\n  an undefined spatial reference system (SRS), an ER_SRS_NOT_FOUND\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_srs_not_found) error occurs.\n\no If there are multiple geometry arguments and those arguments are in\n  the same SRS, the return value is in that SRS. If those arguments are\n  not in the same SRS, an ER_GIS_DIFFERENT_SRIDS_AGGREGATION\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_gis_different_srids_aggregation) error occurs.\n\no The result is the narrowest MultiXxx or GeometryCollection value\n  possible, with the result type determined from the non-NULL geometry\n  arguments as follows:\n\n  o If all arguments are Point values, the result is a MultiPoint\n    value.\n\n  o If all arguments are LineString values, the result is a\n    MultiLineString value.\n\n  o If all arguments are Polygon values, the result is a MultiPolygon\n    value.\n\n  o Otherwise, the arguments are a mix of geometry types and the result\n    is a GeometryCollection value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-aggregate-functions.html\n\n','CREATE TABLE product (\n  year INTEGER,\n  product VARCHAR(256),\n  location Geometry\n);\n\nINSERT INTO product\n(year,  product,     location) VALUES\n(2000, \"Calculator\", ST_GeomFromText(\'point(60 -24)\',4326)),\n(2000, \"Computer\"  , ST_GeomFromText(\'point(28 -77)\',4326)),\n(2000, \"Abacus\"    , ST_GeomFromText(\'point(28 -77)\',4326)),\n(2000, \"TV\"        , ST_GeomFromText(\'point(38  60)\',4326)),\n(2001, \"Calculator\", ST_GeomFromText(\'point(60 -24)\',4326)),\n(2001, \"Computer\"  , ST_GeomFromText(\'point(28 -77)\',4326));\n\nmysql> SELECT ST_AsText(ST_Collect(location)) AS result\n       FROM product;\n+------------------------------------------------------------------+\n| result                                                           |\n+------------------------------------------------------------------+\n| MULTIPOINT((60 -24),(28 -77),(28 -77),(38 60),(60 -24),(28 -77)) |\n+------------------------------------------------------------------+\n\nmysql> SELECT ST_AsText(ST_Collect(DISTINCT location)) AS result\n       FROM product;\n+---------------------------------------+\n| result                                |\n+---------------------------------------+\n| MULTIPOINT((60 -24),(28 -77),(38 60)) |\n+---------------------------------------+\n\nmysql> SELECT year, ST_AsText(ST_Collect(location)) AS result\n       FROM product GROUP BY year;\n+------+------------------------------------------------+\n| year | result                                         |\n+------+------------------------------------------------+\n| 2000 | MULTIPOINT((60 -24),(28 -77),(28 -77),(38 60)) |\n| 2001 | MULTIPOINT((60 -24),(28 -77))                  |\n+------+------------------------------------------------+\n\nmysql> SELECT year, ST_AsText(ST_Collect(DISTINCT location)) AS result\n       FROM product GROUP BY year;\n+------+---------------------------------------+\n| year | result                                |\n+------+---------------------------------------+\n| 2000 | MULTIPOINT((60 -24),(28 -77),(38 60)) |\n| 2001 | MULTIPOINT((60 -24),(28 -77))         |\n+------+---------------------------------------+\n\n# selects nothing\nmysql> SELECT ST_Collect(location) AS result\n       FROM product WHERE year = 1999;\n+--------+\n| result |\n+--------+\n| NULL   |\n+--------+\n\nmysql> SELECT ST_AsText(ST_Collect(location)\n         OVER (ORDER BY year, product ROWS BETWEEN 1 PRECEDING AND CURRENT ROW))\n         AS result\n       FROM product;\n+-------------------------------+\n| result                        |\n+-------------------------------+\n| MULTIPOINT((28 -77))          |\n| MULTIPOINT((28 -77),(60 -24)) |\n| MULTIPOINT((60 -24),(28 -77)) |\n| MULTIPOINT((28 -77),(38 60))  |\n| MULTIPOINT((38 60),(60 -24))  |\n| MULTIPOINT((60 -24),(28 -77)) |\n+-------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-aggregate-functions.html'),(376,'ST_DISTANCE_SPHERE',32,'ST_Distance_Sphere(g1, g2 [, radius])\n\nReturns the minimum spherical distance between Point or MultiPoint\narguments on a sphere, in meters. (For general-purpose distance\ncalculations, see the ST_Distance() function.) The optional radius\nargument should be given in meters.\n\nIf both geometry parameters are valid Cartesian Point or MultiPoint\nvalues in SRID 0, the return value is shortest distance between the two\ngeometries on a sphere with the provided radius. If omitted, the\ndefault radius is 6,370,986 meters, Point X and Y coordinates are\ninterpreted as longitude and latitude, respectively, in degrees.\n\nIf both geometry parameters are valid Point or MultiPoint values in a\ngeographic spatial reference system (SRS), the return value is the\nshortest distance between the two geometries on a sphere with the\nprovided radius. If omitted, the default radius is equal to the mean\nradius, defined as (2a+b)/3, where a is the semi-major axis and b is\nthe semi-minor axis of the SRS.\n\nST_Distance_Sphere() handles its arguments as described in the\nintroduction to this section, with these exceptions:\n\no Supported geometry argument combinations are Point and Point, or\n  Point and MultiPoint (in any argument order). If at least one of the\n  geometries is neither Point nor MultiPoint, and its SRID is 0, an\n  ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_cartesian_srs) error occurs. If at\n  least one of the geometries is neither Point nor MultiPoint, and its\n  SRID refers to a geographic SRS, an\n  ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs. If\n  any geometry refers to a projected SRS, an\n  ER_NOT_IMPLEMENTED_FOR_PROJECTED_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_projected_srs) error occurs.\n\no If any argument has a longitude or latitude that is out of range, an\n  error occurs:\n\n  o If a longitude value is not in the range (−180, 180], an\n    ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_longitude_out_of_range) error\n    occurs (ER_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_longitude_out_of_range) prior to MySQL 8.0.12).\n\n  o If a latitude value is not in the range [−90, 90], an\n    ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_latitude_out_of_range) error occurs\n    (ER_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_latitude_out_of_range) prior to MySQL 8.0.12).\n\n  Ranges shown are in degrees. If an SRS uses another unit, the range\n  uses the corresponding values in its unit. The exact range limits\n  deviate slightly due to floating-point arithmetic.\n\no If the radius argument is present but not positive, an\n  ER_NONPOSITIVE_RADIUS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_nonpositive_radius) error occurs.\n\no If the distance exceeds the range of a double-precision number, an\n  ER_STD_OVERFLOW_ERROR\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_std_overflow_error) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html\n\n','mysql> SET @pt1 = ST_GeomFromText(\'POINT(0 0)\');\nmysql> SET @pt2 = ST_GeomFromText(\'POINT(180 0)\');\nmysql> SELECT ST_Distance_Sphere(@pt1, @pt2);\n+--------------------------------+\n| ST_Distance_Sphere(@pt1, @pt2) |\n+--------------------------------+\n|             20015042.813723423 |\n+--------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html'),(377,'ST_ISVALID',32,'ST_IsValid(g)\n\nReturns 1 if the argument is geometrically valid, 0 if the argument is\nnot geometrically valid. Geometry validity is defined by the OGC\nspecification.\n\nThe only valid empty geometry is represented in the form of an empty\ngeometry collection value. ST_IsValid() returns 1 in this case. MySQL\ndoes not support GIS EMPTY values such as POINT EMPTY.\n\nST_IsValid() handles its arguments as described in the introduction to\nthis section, with this exception:\n\no If the geometry has a geographic SRS with a longitude or latitude\n  that is out of range, an error occurs:\n\n  o If a longitude value is not in the range (−180, 180], an\n    ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_longitude_out_of_range) error\n    occurs (ER_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_longitude_out_of_range) prior to MySQL 8.0.12).\n\n  o If a latitude value is not in the range [−90, 90], an\n    ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_latitude_out_of_range) error occurs\n    (ER_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_latitude_out_of_range) prior to MySQL 8.0.12).\n\n  Ranges shown are in degrees. If an SRS uses another unit, the range\n  uses the corresponding values in its unit. The exact range limits\n  deviate slightly due to floating-point arithmetic.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html\n\n','mysql> SET @ls1 = ST_GeomFromText(\'LINESTRING(0 0,-0.00 0,0.0 0)\');\nmysql> SET @ls2 = ST_GeomFromText(\'LINESTRING(0 0, 1 1)\');\nmysql> SELECT ST_IsValid(@ls1);\n+------------------+\n| ST_IsValid(@ls1) |\n+------------------+\n|                0 |\n+------------------+\nmysql> SELECT ST_IsValid(@ls2);\n+------------------+\n| ST_IsValid(@ls2) |\n+------------------+\n|                1 |\n+------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html'),(378,'ST_MAKEENVELOPE',32,'ST_MakeEnvelope(pt1, pt2)\n\nReturns the rectangle that forms the envelope around two points, as a\nPoint, LineString, or Polygon.\n\nCalculations are done using the Cartesian coordinate system rather than\non a sphere, spheroid, or on earth.\n\nGiven two points pt1 and pt2, ST_MakeEnvelope() creates the result\ngeometry on an abstract plane like this:\n\no If pt1 and pt2 are equal, the result is the point pt1.\n\no Otherwise, if (pt1, pt2) is a vertical or horizontal line segment,\n  the result is the line segment (pt1, pt2).\n\no Otherwise, the result is a polygon using pt1 and pt2 as diagonal\n  points.\n\nThe result geometry has an SRID of 0.\n\nST_MakeEnvelope() handles its arguments as described in the\nintroduction to this section, with these exceptions:\n\no If the arguments are not Point values, an ER_WRONG_ARGUMENTS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_wrong_arguments) error occurs.\n\no An ER_GIS_INVALID_DATA\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_gis_invalid_data) error occurs for the additional\n  condition that any coordinate value of the two points is infinite or\n  NaN.\n\no If any geometry has an SRID value for a geographic spatial reference\n  system (SRS), an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html\n\n','mysql> SET @pt1 = ST_GeomFromText(\'POINT(0 0)\');\nmysql> SET @pt2 = ST_GeomFromText(\'POINT(1 1)\');\nmysql> SELECT ST_AsText(ST_MakeEnvelope(@pt1, @pt2));\n+----------------------------------------+\n| ST_AsText(ST_MakeEnvelope(@pt1, @pt2)) |\n+----------------------------------------+\n| POLYGON((0 0,1 0,1 1,0 1,0 0))         |\n+----------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html'),(379,'ST_SIMPLIFY',32,'ST_Simplify(g, max_distance)\n\nSimplifies a geometry using the Douglas-Peucker algorithm and returns a\nsimplified value of the same type.\n\nThe geometry may be any geometry type, although the Douglas-Peucker\nalgorithm may not actually process every type. A geometry collection is\nprocessed by giving its components one by one to the simplification\nalgorithm, and the returned geometries are put into a geometry\ncollection as result.\n\nThe max_distance argument is the distance (in units of the input\ncoordinates) of a vertex to other segments to be removed. Vertices\nwithin this distance of the simplified linestring are removed.\n\nAccording to Boost.Geometry, geometries might become invalid as a\nresult of the simplification process, and the process might create\nself-intersections. To check the validity of the result, pass it to\nST_IsValid().\n\nST_Simplify() handles its arguments as described in the introduction to\nthis section, with this exception:\n\no If the max_distance argument is not positive, or is NaN, an\n  ER_WRONG_ARGUMENTS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_wrong_arguments) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html\n\n','mysql> SET @g = ST_GeomFromText(\'LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)\');\nmysql> SELECT ST_AsText(ST_Simplify(@g, 0.5));\n+---------------------------------+\n| ST_AsText(ST_Simplify(@g, 0.5)) |\n+---------------------------------+\n| LINESTRING(0 0,0 1,1 1,2 3,3 3) |\n+---------------------------------+\nmysql> SELECT ST_AsText(ST_Simplify(@g, 1.0));\n+---------------------------------+\n| ST_AsText(ST_Simplify(@g, 1.0)) |\n+---------------------------------+\n| LINESTRING(0 0,3 3)             |\n+---------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html'),(380,'ST_VALIDATE',32,'ST_Validate(g)\n\nValidates a geometry according to the OGC specification. A geometry can\nbe syntactically well-formed (WKB value plus SRID) but geometrically\ninvalid. For example, this polygon is geometrically invalid: POLYGON((0\n0, 0 0, 0 0, 0 0, 0 0))\n\nST_Validate() returns the geometry if it is syntactically well-formed\nand is geometrically valid, NULL if the argument is not syntactically\nwell-formed or is not geometrically valid or is NULL.\n\nST_Validate() can be used to filter out invalid geometry data, although\nat a cost. For applications that require more precise results not\ntainted by invalid data, this penalty may be worthwhile.\n\nIf the geometry argument is valid, it is returned as is, except that if\nan input Polygon or MultiPolygon has clockwise rings, those rings are\nreversed before checking for validity. If the geometry is valid, the\nvalue with the reversed rings is returned.\n\nThe only valid empty geometry is represented in the form of an empty\ngeometry collection value. ST_Validate() returns it directly without\nfurther checks in this case.\n\nAs of MySQL 8.0.13, ST_Validate() handles its arguments as described in\nthe introduction to this section, with these exceptions:\n\no If the geometry has a geographic SRS with a longitude or latitude\n  that is out of range, an error occurs:\n\n  o If a longitude value is not in the range (−180, 180], an\n    ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_longitude_out_of_range) error\n    occurs (ER_LONGITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_longitude_out_of_range) prior to MySQL 8.0.12).\n\n  o If a latitude value is not in the range [−90, 90], an\n    ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_geometry_param_latitude_out_of_range) error occurs\n    (ER_LATITUDE_OUT_OF_RANGE\n    (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-referen\n    ce.html#error_er_latitude_out_of_range) prior to MySQL 8.0.12).\n\n  Ranges shown are in degrees. The exact range limits deviate slightly\n  due to floating-point arithmetic.\n\nPrior to MySQL 8.0.13, ST_Validate() handles its arguments as described\nin the introduction to this section, with these exceptions:\n\no If the geometry is not syntactically well-formed, the return value is\n  NULL. An ER_GIS_INVALID_DATA\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_gis_invalid_data) error does not occur.\n\no If the geometry has an SRID value for a geographic spatial reference\n  system (SRS), an ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS\n  (https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference\n  .html#error_er_not_implemented_for_geographic_srs) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html\n\n','mysql> SET @ls1 = ST_GeomFromText(\'LINESTRING(0 0)\');\nmysql> SET @ls2 = ST_GeomFromText(\'LINESTRING(0 0, 1 1)\');\nmysql> SELECT ST_AsText(ST_Validate(@ls1));\n+------------------------------+\n| ST_AsText(ST_Validate(@ls1)) |\n+------------------------------+\n| NULL                         |\n+------------------------------+\nmysql> SELECT ST_AsText(ST_Validate(@ls2));\n+------------------------------+\n| ST_AsText(ST_Validate(@ls2)) |\n+------------------------------+\n| LINESTRING(0 0,1 1)          |\n+------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/spatial-convenience-functions.html'),(381,'JSON_ARRAY',32,'Syntax:\nJSON_ARRAY([val[, val] ...])\n\nEvaluates a (possibly empty) list of values and returns a JSON array\ncontaining those values.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-creation-functions.html\n\n','mysql> SELECT JSON_ARRAY(1, \"abc\", NULL, TRUE, CURTIME());\n+---------------------------------------------+\n| JSON_ARRAY(1, \"abc\", NULL, TRUE, CURTIME()) |\n+---------------------------------------------+\n| [1, \"abc\", null, true, \"11:30:24.000000\"]   |\n+---------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-creation-functions.html'),(382,'JSON_OBJECT',32,'Syntax:\nJSON_OBJECT([key, val[, key, val] ...])\n\nEvaluates a (possibly empty) list of key-value pairs and returns a JSON\nobject containing those pairs. An error occurs if any key name is NULL\nor the number of arguments is odd.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-creation-functions.html\n\n','mysql> SELECT JSON_OBJECT(\'id\', 87, \'name\', \'carrot\');\n+-----------------------------------------+\n| JSON_OBJECT(\'id\', 87, \'name\', \'carrot\') |\n+-----------------------------------------+\n| {\"id\": 87, \"name\": \"carrot\"}            |\n+-----------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-creation-functions.html'),(383,'JSON_QUOTE',32,'Syntax:\nJSON_QUOTE(string)\n\nQuotes a string as a JSON value by wrapping it with double quote\ncharacters and escaping interior quote and other characters, then\nreturning the result as a utf8mb4 string. Returns NULL if the argument\nis NULL.\n\nThis function is typically used to produce a valid JSON string literal\nfor inclusion within a JSON document.\n\nCertain special characters are escaped with backslashes per the escape\nsequences shown in\nhttps://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n#json-unquote-character-escape-sequences.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-creation-functions.html\n\n','mysql> SELECT JSON_QUOTE(\'null\'), JSON_QUOTE(\'\"null\"\');\n+--------------------+----------------------+\n| JSON_QUOTE(\'null\') | JSON_QUOTE(\'\"null\"\') |\n+--------------------+----------------------+\n| \"null\"             | \"\\\"null\\\"\"           |\n+--------------------+----------------------+\nmysql> SELECT JSON_QUOTE(\'[1, 2, 3]\');\n+-------------------------+\n| JSON_QUOTE(\'[1, 2, 3]\') |\n+-------------------------+\n| \"[1, 2, 3]\"             |\n+-------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-creation-functions.html'),(384,'JSON_CONTAINS',32,'Syntax:\nJSON_CONTAINS(target, candidate[, path])\n\nIndicates by returning 1 or 0 whether a given candidate JSON document\nis contained within a target JSON document, or---if a path argument was\nsupplied---whether the candidate is found at a specific path within the\ntarget. Returns NULL if any argument is NULL, or if the path argument\ndoes not identify a section of the target document. An error occurs if\ntarget or candidate is not a valid JSON document, or if the path\nargument is not a valid path expression or contains a * or ** wildcard.\n\nTo check only whether any data exists at the path, use\nJSON_CONTAINS_PATH() instead.\n\nThe following rules define containment:\n\no A candidate scalar is contained in a target scalar if and only if\n  they are comparable and are equal. Two scalar values are comparable\n  if they have the same JSON_TYPE() types, with the exception that\n  values of types INTEGER and DECIMAL are also comparable to each\n  other.\n\no A candidate array is contained in a target array if and only if every\n  element in the candidate is contained in some element of the target.\n\no A candidate nonarray is contained in a target array if and only if\n  the candidate is contained in some element of the target.\n\no A candidate object is contained in a target object if and only if for\n  each key in the candidate there is a key with the same name in the\n  target and the value associated with the candidate key is contained\n  in the value associated with the target key.\n\nOtherwise, the candidate value is not contained in the target document.\n\nStarting with MySQL 8.0.17, queries using JSON_CONTAINS() on InnoDB\ntables can be optimized using multi-valued indexes; see\nhttps://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-\nmulti-valued, for more information.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SET @j = \'{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}\';\nmysql> SET @j2 = \'1\';\nmysql> SELECT JSON_CONTAINS(@j, @j2, \'$.a\');\n+-------------------------------+\n| JSON_CONTAINS(@j, @j2, \'$.a\') |\n+-------------------------------+\n|                             1 |\n+-------------------------------+\nmysql> SELECT JSON_CONTAINS(@j, @j2, \'$.b\');\n+-------------------------------+\n| JSON_CONTAINS(@j, @j2, \'$.b\') |\n+-------------------------------+\n|                             0 |\n+-------------------------------+\n\nmysql> SET @j2 = \'{\"d\": 4}\';\nmysql> SELECT JSON_CONTAINS(@j, @j2, \'$.a\');\n+-------------------------------+\n| JSON_CONTAINS(@j, @j2, \'$.a\') |\n+-------------------------------+\n|                             0 |\n+-------------------------------+\nmysql> SELECT JSON_CONTAINS(@j, @j2, \'$.c\');\n+-------------------------------+\n| JSON_CONTAINS(@j, @j2, \'$.c\') |\n+-------------------------------+\n|                             1 |\n+-------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(385,'JSON_CONTAINS_PATH',32,'Syntax:\nJSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)\n\nReturns 0 or 1 to indicate whether a JSON document contains data at a\ngiven path or paths. Returns NULL if any argument is NULL. An error\noccurs if the json_doc argument is not a valid JSON document, any path\nargument is not a valid path expression, or one_or_all is not \'one\' or\n\'all\'.\n\nTo check for a specific value at a path, use JSON_CONTAINS() instead.\n\nThe return value is 0 if no specified path exists within the document.\nOtherwise, the return value depends on the one_or_all argument:\n\no \'one\': 1 if at least one path exists within the document, 0\n  otherwise.\n\no \'all\': 1 if all paths exist within the document, 0 otherwise.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SET @j = \'{\"a\": 1, \"b\": 2, \"c\": {\"d\": 4}}\';\nmysql> SELECT JSON_CONTAINS_PATH(@j, \'one\', \'$.a\', \'$.e\');\n+---------------------------------------------+\n| JSON_CONTAINS_PATH(@j, \'one\', \'$.a\', \'$.e\') |\n+---------------------------------------------+\n|                                           1 |\n+---------------------------------------------+\nmysql> SELECT JSON_CONTAINS_PATH(@j, \'all\', \'$.a\', \'$.e\');\n+---------------------------------------------+\n| JSON_CONTAINS_PATH(@j, \'all\', \'$.a\', \'$.e\') |\n+---------------------------------------------+\n|                                           0 |\n+---------------------------------------------+\nmysql> SELECT JSON_CONTAINS_PATH(@j, \'one\', \'$.c.d\');\n+----------------------------------------+\n| JSON_CONTAINS_PATH(@j, \'one\', \'$.c.d\') |\n+----------------------------------------+\n|                                      1 |\n+----------------------------------------+\nmysql> SELECT JSON_CONTAINS_PATH(@j, \'one\', \'$.a.d\');\n+----------------------------------------+\n| JSON_CONTAINS_PATH(@j, \'one\', \'$.a.d\') |\n+----------------------------------------+\n|                                      0 |\n+----------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(386,'JSON_EXTRACT',32,'Syntax:\nJSON_EXTRACT(json_doc, path[, path] ...)\n\nReturns data from a JSON document, selected from the parts of the\ndocument matched by the path arguments. Returns NULL if any argument is\nNULL or no paths locate a value in the document. An error occurs if the\njson_doc argument is not a valid JSON document or any path argument is\nnot a valid path expression.\n\nThe return value consists of all values matched by the path arguments.\nIf it is possible that those arguments could return multiple values,\nthe matched values are autowrapped as an array, in the order\ncorresponding to the paths that produced them. Otherwise, the return\nvalue is the single matched value.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SELECT JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[1]\');\n+--------------------------------------------+\n| JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[1]\') |\n+--------------------------------------------+\n| 20                                         |\n+--------------------------------------------+\nmysql> SELECT JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[1]\', \'$[0]\');\n+----------------------------------------------------+\n| JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[1]\', \'$[0]\') |\n+----------------------------------------------------+\n| [20, 10]                                           |\n+----------------------------------------------------+\nmysql> SELECT JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[2][*]\');\n+-----------------------------------------------+\n| JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[2][*]\') |\n+-----------------------------------------------+\n| [30, 40]                                      |\n+-----------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(387,'->',32,'Syntax:\ncolumn->path\n\nThe -> operator serves as an alias for the JSON_EXTRACT() function when\nused with two arguments, a column identifier on the left and a JSON\npath (a string literal) on the right that is evaluated against the JSON\ndocument (the column value). You can use such expressions in place of\ncolumn references wherever they occur in SQL statements.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SELECT c, JSON_EXTRACT(c, \"$.id\"), g\n     > FROM jemp\n     > WHERE JSON_EXTRACT(c, \"$.id\") > 1\n     > ORDER BY JSON_EXTRACT(c, \"$.name\");\n+-------------------------------+-----------+------+\n| c                             | c->\"$.id\" | g    |\n+-------------------------------+-----------+------+\n| {\"id\": \"3\", \"name\": \"Barney\"} | \"3\"       |    3 |\n| {\"id\": \"4\", \"name\": \"Betty\"}  | \"4\"       |    4 |\n| {\"id\": \"2\", \"name\": \"Wilma\"}  | \"2\"       |    2 |\n+-------------------------------+-----------+------+\n3 rows in set (0.00 sec)\n\nmysql> SELECT c, c->\"$.id\", g\n     > FROM jemp\n     > WHERE c->\"$.id\" > 1\n     > ORDER BY c->\"$.name\";\n+-------------------------------+-----------+------+\n| c                             | c->\"$.id\" | g    |\n+-------------------------------+-----------+------+\n| {\"id\": \"3\", \"name\": \"Barney\"} | \"3\"       |    3 |\n| {\"id\": \"4\", \"name\": \"Betty\"}  | \"4\"       |    4 |\n| {\"id\": \"2\", \"name\": \"Wilma\"}  | \"2\"       |    2 |\n+-------------------------------+-----------+------+\n3 rows in set (0.00 sec)\n\nmysql> ALTER TABLE jemp ADD COLUMN n INT;\nQuery OK, 0 rows affected (0.68 sec)\nRecords: 0  Duplicates: 0  Warnings: 0\n\nmysql> UPDATE jemp SET n=1 WHERE c->\"$.id\" = \"4\";\nQuery OK, 1 row affected (0.04 sec)\nRows matched: 1  Changed: 1  Warnings: 0\n\nmysql> SELECT c, c->\"$.id\", g, n\n     > FROM jemp\n     > WHERE JSON_EXTRACT(c, \"$.id\") > 1\n     > ORDER BY c->\"$.name\";\n+-------------------------------+-----------+------+------+\n| c                             | c->\"$.id\" | g    | n    |\n+-------------------------------+-----------+------+------+\n| {\"id\": \"3\", \"name\": \"Barney\"} | \"3\"       |    3 | NULL |\n| {\"id\": \"4\", \"name\": \"Betty\"}  | \"4\"       |    4 |    1 |\n| {\"id\": \"2\", \"name\": \"Wilma\"}  | \"2\"       |    2 | NULL |\n+-------------------------------+-----------+------+------+\n3 rows in set (0.00 sec)\n\nmysql> DELETE FROM jemp WHERE c->\"$.id\" = \"4\";\nQuery OK, 1 row affected (0.04 sec)\n\nmysql> SELECT c, c->\"$.id\", g, n\n     > FROM jemp\n     > WHERE JSON_EXTRACT(c, \"$.id\") > 1\n     > ORDER BY c->\"$.name\";\n+-------------------------------+-----------+------+------+\n| c                             | c->\"$.id\" | g    | n    |\n+-------------------------------+-----------+------+------+\n| {\"id\": \"3\", \"name\": \"Barney\"} | \"3\"       |    3 | NULL |\n| {\"id\": \"2\", \"name\": \"Wilma\"}  | \"2\"       |    2 | NULL |\n+-------------------------------+-----------+------+------+\n2 rows in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(388,'->>',32,'Syntax:\ncolumn->>path\n\nThis is an improved, unquoting extraction operator. Whereas the ->\noperator simply extracts a value, the ->> operator in addition unquotes\nthe extracted result. In other words, given a JSON column value column\nand a path expression path (a string literal), the following three\nexpressions return the same value:\n\no JSON_UNQUOTE( JSON_EXTRACT(column, path) )\n\no JSON_UNQUOTE(column -> path)\n\no column->>path\n\nThe ->> operator can be used wherever JSON_UNQUOTE(JSON_EXTRACT())\nwould be allowed. This includes (but is not limited to) SELECT lists,\nWHERE and HAVING clauses, and ORDER BY and GROUP BY clauses.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SELECT * FROM jemp WHERE g > 2;\n+-------------------------------+------+\n| c                             | g    |\n+-------------------------------+------+\n| {\"id\": \"3\", \"name\": \"Barney\"} |    3 |\n| {\"id\": \"4\", \"name\": \"Betty\"}  |    4 |\n+-------------------------------+------+\n2 rows in set (0.01 sec)\n\nmysql> SELECT c->\'$.name\' AS name\n    ->     FROM jemp WHERE g > 2;\n+----------+\n| name     |\n+----------+\n| \"Barney\" |\n| \"Betty\"  |\n+----------+\n2 rows in set (0.00 sec)\n\nmysql> SELECT JSON_UNQUOTE(c->\'$.name\') AS name\n    ->     FROM jemp WHERE g > 2;\n+--------+\n| name   |\n+--------+\n| Barney |\n| Betty  |\n+--------+\n2 rows in set (0.00 sec)\n\nmysql> SELECT c->>\'$.name\' AS name\n    ->     FROM jemp WHERE g > 2;\n+--------+\n| name   |\n+--------+\n| Barney |\n| Betty  |\n+--------+\n2 rows in set (0.00 sec)\n\nmysql> CREATE TABLE tj10 (a JSON, b INT);\nQuery OK, 0 rows affected (0.26 sec)\n\nmysql> INSERT INTO tj10 VALUES\n    ->     (\'[3,10,5,\"x\",44]\', 33),\n    ->     (\'[3,10,5,17,[22,\"y\",66]]\', 0);\nQuery OK, 2 rows affected (0.04 sec)\nRecords: 2  Duplicates: 0  Warnings: 0\n\nmysql> SELECT a->\"$[3]\", a->\"$[4][1]\" FROM tj10;\n+-----------+--------------+\n| a->\"$[3]\" | a->\"$[4][1]\" |\n+-----------+--------------+\n| \"x\"       | NULL         |\n| 17        | \"y\"          |\n+-----------+--------------+\n2 rows in set (0.00 sec)\n\nmysql> SELECT a->>\"$[3]\", a->>\"$[4][1]\" FROM tj10;\n+------------+---------------+\n| a->>\"$[3]\" | a->>\"$[4][1]\" |\n+------------+---------------+\n| x          | NULL          |\n| 17         | y             |\n+------------+---------------+\n2 rows in set (0.00 sec)\n\nmysql> EXPLAIN SELECT c->>\'$.name\' AS name\n    ->     FROM jemp WHERE g > 2\\G\n*************************** 1. row ***************************\n           id: 1\n  select_type: SIMPLE\n        table: jemp\n   partitions: NULL\n         type: range\npossible_keys: i\n          key: i\n      key_len: 5\n          ref: NULL\n         rows: 2\n     filtered: 100.00\n        Extra: Using where\n1 row in set, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS\\G\n*************************** 1. row ***************************\n  Level: Note\n   Code: 1003\nMessage: /* select#1 */ select\njson_unquote(json_extract(`jtest`.`jemp`.`c`,\'$.name\')) AS `name` from\n`jtest`.`jemp` where (`jtest`.`jemp`.`g` > 2)\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(389,'JSON_KEYS',32,'Syntax:\nJSON_KEYS(json_doc[, path])\n\nReturns the keys from the top-level value of a JSON object as a JSON\narray, or, if a path argument is given, the top-level keys from the\nselected path. Returns NULL if any argument is NULL, the json_doc\nargument is not an object, or path, if given, does not locate an\nobject. An error occurs if the json_doc argument is not a valid JSON\ndocument or the path argument is not a valid path expression or\ncontains a * or ** wildcard.\n\nThe result array is empty if the selected object is empty. If the\ntop-level value has nested subobjects, the return value does not\ninclude keys from those subobjects.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SELECT JSON_KEYS(\'{\"a\": 1, \"b\": {\"c\": 30}}\');\n+---------------------------------------+\n| JSON_KEYS(\'{\"a\": 1, \"b\": {\"c\": 30}}\') |\n+---------------------------------------+\n| [\"a\", \"b\"]                            |\n+---------------------------------------+\nmysql> SELECT JSON_KEYS(\'{\"a\": 1, \"b\": {\"c\": 30}}\', \'$.b\');\n+----------------------------------------------+\n| JSON_KEYS(\'{\"a\": 1, \"b\": {\"c\": 30}}\', \'$.b\') |\n+----------------------------------------------+\n| [\"c\"]                                        |\n+----------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(390,'JSON_OVERLAPS',32,'Syntax:\nJSON_OVERLAPS(json_doc1, json_doc2)\n\nCompares two JSON documents. Returns true (1) if the two document have\nany key-value pairs or array elements in common. If both arguments are\nscalars, the function performs a simple equality test. If either\nargument is NULL, the function returns NULL.\n\nThis function serves as counterpart to JSON_CONTAINS(), which requires\nall elements of the array searched for to be present in the array\nsearched in. Thus, JSON_CONTAINS() performs an AND operation on search\nkeys, while JSON_OVERLAPS() performs an OR operation.\n\nQueries on JSON columns of InnoDB tables using JSON_OVERLAPS() in the\nWHERE clause can be optimized using multi-valued indexes.\nhttps://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-\nmulti-valued, provides detailed information and examples.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SELECT JSON_OVERLAPS(\"[1,3,5,7]\", \"[2,5,7]\");\n+---------------------------------------+\n| JSON_OVERLAPS(\"[1,3,5,7]\", \"[2,5,7]\") |\n+---------------------------------------+\n|                                     1 |\n+---------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\"[1,3,5,7]\", \"[2,6,7]\");\n+---------------------------------------+\n| JSON_OVERLAPS(\"[1,3,5,7]\", \"[2,6,7]\") |\n+---------------------------------------+\n|                                     1 |\n+---------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\"[1,3,5,7]\", \"[2,6,8]\");\n+---------------------------------------+\n| JSON_OVERLAPS(\"[1,3,5,7]\", \"[2,6,8]\") |\n+---------------------------------------+\n|                                     0 |\n+---------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\'[[1,2],[3,4],5]\', \'[1,[2,3],[4,5]]\');\n+-----------------------------------------------------+\n| JSON_OVERLAPS(\'[[1,2],[3,4],5]\', \'[1,[2,3],[4,5]]\') |\n+-----------------------------------------------------+\n|                                                   0 |\n+-----------------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\'{\"a\":1,\"b\":10,\"d\":10}\', \'{\"c\":1,\"e\":10,\"f\":1,\"d\":10}\');\n+-----------------------------------------------------------------------+\n| JSON_OVERLAPS(\'{\"a\":1,\"b\":10,\"d\":10}\', \'{\"c\":1,\"e\":10,\"f\":1,\"d\":10}\') |\n+-----------------------------------------------------------------------+\n|                                                                     1 |\n+-----------------------------------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\'{\"a\":1,\"b\":10,\"d\":10}\', \'{\"a\":5,\"e\":10,\"f\":1,\"d\":20}\');\n+-----------------------------------------------------------------------+\n| JSON_OVERLAPS(\'{\"a\":1,\"b\":10,\"d\":10}\', \'{\"a\":5,\"e\":10,\"f\":1,\"d\":20}\') |\n+-----------------------------------------------------------------------+\n|                                                                     0 |\n+-----------------------------------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\'5\', \'5\');\n+-------------------------+\n| JSON_OVERLAPS(\'5\', \'5\') |\n+-------------------------+\n|                       1 |\n+-------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\'5\', \'6\');\n+-------------------------+\n| JSON_OVERLAPS(\'5\', \'6\') |\n+-------------------------+\n|                       0 |\n+-------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\'[4,5,6,7]\', \'6\');\n+---------------------------------+\n| JSON_OVERLAPS(\'[4,5,6,7]\', \'6\') |\n+---------------------------------+\n|                               1 |\n+---------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\'[4,5,\"6\",7]\', \'6\');\n+-----------------------------------+\n| JSON_OVERLAPS(\'[4,5,\"6\",7]\', \'6\') |\n+-----------------------------------+\n|                                 0 |\n+-----------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_OVERLAPS(\'[4,5,6,7]\', \'\"6\"\');\n+-----------------------------------+\n| JSON_OVERLAPS(\'[4,5,6,7]\', \'\"6\"\') |\n+-----------------------------------+\n|                                 0 |\n+-----------------------------------+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(391,'JSON_SEARCH',32,'Syntax:\nJSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path]\n...])\n\nReturns the path to the given string within a JSON document. Returns\nNULL if any of the json_doc, search_str, or path arguments are NULL; no\npath exists within the document; or search_str is not found. An error\noccurs if the json_doc argument is not a valid JSON document, any path\nargument is not a valid path expression, one_or_all is not \'one\' or\n\'all\', or escape_char is not a constant expression.\n\nThe one_or_all argument affects the search as follows:\n\no \'one\': The search terminates after the first match and returns one\n  path string. It is undefined which match is considered first.\n\no \'all\': The search returns all matching path strings such that no\n  duplicate paths are included. If there are multiple strings, they are\n  autowrapped as an array. The order of the array elements is\n  undefined.\n\nWithin the search_str search string argument, the % and _ characters\nwork as for the LIKE operator: % matches any number of characters\n(including zero characters), and _ matches exactly one character.\n\nTo specify a literal % or _ character in the search string, precede it\nby the escape character. The default is \\ if the escape_char argument\nis missing or NULL. Otherwise, escape_char must be a constant that is\nempty or one character.\n\nFor more information about matching and escape character behavior, see\nthe description of LIKE in\nhttps://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html\n. For escape character handling, a difference from the LIKE behavior\nis that the escape character for JSON_SEARCH() must evaluate to a\nconstant at compile time, not just at execution time. For example, if\nJSON_SEARCH() is used in a prepared statement and the escape_char\nargument is supplied using a ? parameter, the parameter value might be\nconstant at execution time, but is not at compile time.\n\nsearch_str and path are always interpreted as utf8mb4 strings,\nregardless of their actual encoding. This is a known issue which is\nfixed in MySQL 8.0.24 ( Bug #32449181).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SET @j = \'[\"abc\", [{\"k\": \"10\"}, \"def\"], {\"x\":\"abc\"}, {\"y\":\"bcd\"}]\';\n\nmysql> SELECT JSON_SEARCH(@j, \'one\', \'abc\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'one\', \'abc\') |\n+-------------------------------+\n| \"$[0]\"                        |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'abc\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'all\', \'abc\') |\n+-------------------------------+\n| [\"$[0]\", \"$[2].x\"]            |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'ghi\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'all\', \'ghi\') |\n+-------------------------------+\n| NULL                          |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\');\n+------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\') |\n+------------------------------+\n| \"$[1][0].k\"                  |\n+------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$\');\n+-----------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$\') |\n+-----------------------------------------+\n| \"$[1][0].k\"                             |\n+-----------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[*]\');\n+--------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[*]\') |\n+--------------------------------------------+\n| \"$[1][0].k\"                                |\n+--------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$**.k\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$**.k\') |\n+---------------------------------------------+\n| \"$[1][0].k\"                                 |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[*][0].k\');\n+-------------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[*][0].k\') |\n+-------------------------------------------------+\n| \"$[1][0].k\"                                     |\n+-------------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[1]\');\n+--------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[1]\') |\n+--------------------------------------------+\n| \"$[1][0].k\"                                |\n+--------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[1][0]\');\n+-----------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[1][0]\') |\n+-----------------------------------------------+\n| \"$[1][0].k\"                                   |\n+-----------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'abc\', NULL, \'$[2]\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'abc\', NULL, \'$[2]\') |\n+---------------------------------------------+\n| \"$[2].x\"                                    |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%a%\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%a%\') |\n+-------------------------------+\n| [\"$[0]\", \"$[2].x\"]            |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\') |\n+-------------------------------+\n| [\"$[0]\", \"$[2].x\", \"$[3].y\"]  |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[0]\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[0]\') |\n+---------------------------------------------+\n| \"$[0]\"                                      |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[2]\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[2]\') |\n+---------------------------------------------+\n| \"$[2].x\"                                    |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[1]\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[1]\') |\n+---------------------------------------------+\n| NULL                                        |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', \'\', \'$[1]\');\n+-------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', \'\', \'$[1]\') |\n+-------------------------------------------+\n| NULL                                      |\n+-------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', \'\', \'$[3]\');\n+-------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', \'\', \'$[3]\') |\n+-------------------------------------------+\n| \"$[3].y\"                                  |\n+-------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(392,'JSON_VALUE',32,'Syntax:\nJSON_VALUE(json_doc, path)\n\nExtracts a value from a JSON document at the path given in the\nspecified document, and returns the extracted value, optionally\nconverting it to a desired type. The complete syntax is shown here:\n\nJSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])\n\non_empty:\n    {NULL | ERROR | DEFAULT value} ON EMPTY\n\non_error:\n    {NULL | ERROR | DEFAULT value} ON ERROR\n\njson_doc is a valid JSON document. If this is NULL, the function\nreturns NULL.\n\npath is a JSON path pointing to a location in the document. This must\nbe a string literal value.\n\ntype is one of the following data types:\n\no FLOAT\n\no DOUBLE\n\no DECIMAL\n\no SIGNED\n\no UNSIGNED\n\no DATE\n\no TIME\n\no DATETIME\n\no YEAR (MySQL 8.0.22 and later)\n\n  YEAR values of one or two digits are not supported.\n\no CHAR\n\no JSON\n\nThe types just listed are the same as the (non-array) types supported\nby the CAST() function.\n\nIf not specified by a RETURNING clause, the JSON_VALUE() function\'s\nreturn type is VARCHAR(512). When no character set is specified for the\nreturn type, JSON_VALUE() uses utf8mb4 with the binary collation, which\nis case-sensitive; if utf8mb4 is specified as the character set for the\nresult, the server uses the default collation for this character set,\nwhich is not case-sensitive.\n\nWhen the data at the specified path consists of or resolves to a JSON\nnull literal, the function returns SQL NULL.\n\non_empty, if specified, determines how JSON_VALUE() behaves when no\ndata is found at the path given; this clause takes one of the following\nvalues:\n\no NULL ON EMPTY: The function returns NULL; this is the default ON\n  EMPTY behavior.\n\no DEFAULT value ON EMPTY: the provided value is returned. The value\'s\n  type must match that of the return type.\n\no ERROR ON EMPTY: The function throws an error.\n\nIf used, on_error takes one of the following values with the\ncorresponding outcome when an error occurs, as listed here:\n\no NULL ON ERROR: JSON_VALUE() returns NULL; this is the default\n  behavior if no ON ERROR clause is used.\n\no DEFAULT value ON ERROR: This is the value returned; its value must\n  match that of the return type.\n\no ERROR ON ERROR: An error is thrown.\n\nON EMPTY, if used, must precede any ON ERROR clause. Specifying them in\nthe wrong order results in a syntax error.\n\nError handling In general, errors are handled by JSON_VALUE() as\nfollows:\n\no All JSON input (document and path) is checked for validity. If any of\n  it is not valid, an SQL error is thrown without triggering the ON\n  ERROR clause.\n\no ON ERROR is triggered whenever any of the following events occur:\n\n  o Attempting to extract an object or an array, such as that resulting\n    from a path that resolves to multiple locations within the JSON\n    document\n\n  o Conversion errors, such as attempting to convert \'asdf\' to an\n    UNSIGNED value\n\n  o Truncation of values\n\no A conversion error always triggers a warning even if NULL ON ERROR or\n  DEFAULT ... ON ERROR is specified.\n\no The ON EMPTY clause is triggered when the source JSON document (expr)\n  contains no data at the specified location (path).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SELECT JSON_VALUE(\'{\"fname\": \"Joe\", \"lname\": \"Palmer\"}\', \'$.fname\');\n+--------------------------------------------------------------+\n| JSON_VALUE(\'{\"fname\": \"Joe\", \"lname\": \"Palmer\"}\', \'$.fname\') |\n+--------------------------------------------------------------+\n| Joe                                                          |\n+--------------------------------------------------------------+\n\nmysql> SELECT JSON_VALUE(\'{\"item\": \"shoes\", \"price\": \"49.95\"}\', \'$.price\'\n    -> RETURNING DECIMAL(4,2)) AS price;\n+-------+\n| price |\n+-------+\n| 49.95 |\n+-------+\n\nSELECT CAST(\n    JSON_UNQUOTE( JSON_EXTRACT(json_doc, path) )\n    AS type\n);\n\nCREATE TABLE t1(\n    j JSON,\n    INDEX i1 ( (JSON_VALUE(j, \'$.id\' RETURNING UNSIGNED)) )\n);\n\nmysql> EXPLAIN SELECT * FROM t1\n    ->     WHERE JSON_VALUE(j, \'$.id\' RETURNING UNSIGNED) = 123\\G\n*************************** 1. row ***************************\n           id: 1\n  select_type: SIMPLE\n        table: t1\n   partitions: NULL\n         type: ref\npossible_keys: i1\n          key: i1\n      key_len: 9\n          ref: const\n         rows: 1\n     filtered: 100.00\n        Extra: NULL\n\nCREATE TABLE t2 (\n    j JSON,\n    g INT GENERATED ALWAYS AS (j->\"$.id\"),\n    INDEX i1 (g)\n);\n\nmysql> EXPLAIN SELECT * FROM t2 WHERE g  = 123\\G\n*************************** 1. row ***************************\n           id: 1\n  select_type: SIMPLE\n        table: t2\n   partitions: NULL\n         type: ref\npossible_keys: i1\n          key: i1\n      key_len: 5\n          ref: const\n         rows: 1\n     filtered: 100.00\n        Extra: NULL\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(393,'MEMBER OF',32,'Syntax:\nvalue MEMBER OF(json_array)\n\nReturns true (1) if value is an element of json_array, otherwise\nreturns false (0). value must be a scalar or a JSON document; if it is\na scalar, the operator attempts to treat it as an element of a JSON\narray. If value or json_array is NULL, the function returns NULL.\n\nQueries using MEMBER OF() on JSON columns of InnoDB tables in the WHERE\nclause can be optimized using multi-valued indexes. See\nhttps://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-\nmulti-valued, for detailed information and examples.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\n\n','mysql> SELECT 17 MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\');\n+-------------------------------------------+\n| 17 MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\') |\n+-------------------------------------------+\n|                                         1 |\n+-------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT \'ab\' MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\');\n+---------------------------------------------+\n| \'ab\' MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\') |\n+---------------------------------------------+\n|                                           1 |\n+---------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT 7 MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\');\n+------------------------------------------+\n| 7 MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\') |\n+------------------------------------------+\n|                                        0 |\n+------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT \'a\' MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\');\n+--------------------------------------------+\n| \'a\' MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\') |\n+--------------------------------------------+\n|                                          0 |\n+--------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT\n    -> 17 MEMBER OF(\'[23, \"abc\", \"17\", \"ab\", 10]\'),\n    -> \"17\" MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\')\\G\n*************************** 1. row ***************************\n17 MEMBER OF(\'[23, \"abc\", \"17\", \"ab\", 10]\'): 0\n\"17\" MEMBER OF(\'[23, \"abc\", 17, \"ab\", 10]\'): 0\n1 row in set (0.00 sec)\n\nmysql> SELECT CAST(\'[4,5]\' AS JSON) MEMBER OF(\'[[3,4],[4,5]]\');\n+--------------------------------------------------+\n| CAST(\'[4,5]\' AS JSON) MEMBER OF(\'[[3,4],[4,5]]\') |\n+--------------------------------------------------+\n|                                                1 |\n+--------------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_ARRAY(4,5) MEMBER OF(\'[[3,4],[4,5]]\');\n+--------------------------------------------+\n| JSON_ARRAY(4,5) MEMBER OF(\'[[3,4],[4,5]]\') |\n+--------------------------------------------+\n|                                          1 |\n+--------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SET @a = CAST(\'{\"a\":1}\' AS JSON);\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SET @b = JSON_OBJECT(\"b\", 2);\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SET @c = JSON_ARRAY(17, @b, \"abc\", @a, 23);\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @a MEMBER OF(@c), @b MEMBER OF(@c);\n+------------------+------------------+\n| @a MEMBER OF(@c) | @b MEMBER OF(@c) |\n+------------------+------------------+\n|                1 |                1 |\n+------------------+------------------+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html'),(394,'JSON_ARRAY_APPEND',32,'Syntax:\nJSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)\n\nAppends values to the end of the indicated arrays within a JSON\ndocument and returns the result. Returns NULL if any argument is NULL.\nAn error occurs if the json_doc argument is not a valid JSON document\nor any path argument is not a valid path expression or contains a * or\n** wildcard.\n\nThe path-value pairs are evaluated left to right. The document produced\nby evaluating one pair becomes the new value against which the next\npair is evaluated.\n\nIf a path selects a scalar or object value, that value is autowrapped\nwithin an array and the new value is added to that array. Pairs for\nwhich the path does not identify any value in the JSON document are\nignored.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SET @j = \'[\"a\", [\"b\", \"c\"], \"d\"]\';\nmysql> SELECT JSON_ARRAY_APPEND(@j, \'$[1]\', 1);\n+----------------------------------+\n| JSON_ARRAY_APPEND(@j, \'$[1]\', 1) |\n+----------------------------------+\n| [\"a\", [\"b\", \"c\", 1], \"d\"]        |\n+----------------------------------+\nmysql> SELECT JSON_ARRAY_APPEND(@j, \'$[0]\', 2);\n+----------------------------------+\n| JSON_ARRAY_APPEND(@j, \'$[0]\', 2) |\n+----------------------------------+\n| [[\"a\", 2], [\"b\", \"c\"], \"d\"]      |\n+----------------------------------+\nmysql> SELECT JSON_ARRAY_APPEND(@j, \'$[1][0]\', 3);\n+-------------------------------------+\n| JSON_ARRAY_APPEND(@j, \'$[1][0]\', 3) |\n+-------------------------------------+\n| [\"a\", [[\"b\", 3], \"c\"], \"d\"]         |\n+-------------------------------------+\n\nmysql> SET @j = \'{\"a\": 1, \"b\": [2, 3], \"c\": 4}\';\nmysql> SELECT JSON_ARRAY_APPEND(@j, \'$.b\', \'x\');\n+------------------------------------+\n| JSON_ARRAY_APPEND(@j, \'$.b\', \'x\')  |\n+------------------------------------+\n| {\"a\": 1, \"b\": [2, 3, \"x\"], \"c\": 4} |\n+------------------------------------+\nmysql> SELECT JSON_ARRAY_APPEND(@j, \'$.c\', \'y\');\n+--------------------------------------+\n| JSON_ARRAY_APPEND(@j, \'$.c\', \'y\')    |\n+--------------------------------------+\n| {\"a\": 1, \"b\": [2, 3], \"c\": [4, \"y\"]} |\n+--------------------------------------+\n\nmysql> SET @j = \'{\"a\": 1}\';\nmysql> SELECT JSON_ARRAY_APPEND(@j, \'$\', \'z\');\n+---------------------------------+\n| JSON_ARRAY_APPEND(@j, \'$\', \'z\') |\n+---------------------------------+\n| [{\"a\": 1}, \"z\"]                 |\n+---------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(395,'JSON_ARRAY_INSERT',32,'Syntax:\nJSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)\n\nUpdates a JSON document, inserting into an array within the document\nand returning the modified document. Returns NULL if any argument is\nNULL. An error occurs if the json_doc argument is not a valid JSON\ndocument or any path argument is not a valid path expression or\ncontains a * or ** wildcard or does not end with an array element\nidentifier.\n\nThe path-value pairs are evaluated left to right. The document produced\nby evaluating one pair becomes the new value against which the next\npair is evaluated.\n\nPairs for which the path does not identify any array in the JSON\ndocument are ignored. If a path identifies an array element, the\ncorresponding value is inserted at that element position, shifting any\nfollowing values to the right. If a path identifies an array position\npast the end of an array, the value is inserted at the end of the\narray.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SET @j = \'[\"a\", {\"b\": [1, 2]}, [3, 4]]\';\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[1]\', \'x\');\n+------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[1]\', \'x\') |\n+------------------------------------+\n| [\"a\", \"x\", {\"b\": [1, 2]}, [3, 4]]  |\n+------------------------------------+\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[100]\', \'x\');\n+--------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[100]\', \'x\') |\n+--------------------------------------+\n| [\"a\", {\"b\": [1, 2]}, [3, 4], \"x\"]    |\n+--------------------------------------+\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[1].b[0]\', \'x\');\n+-----------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[1].b[0]\', \'x\') |\n+-----------------------------------------+\n| [\"a\", {\"b\": [\"x\", 1, 2]}, [3, 4]]       |\n+-----------------------------------------+\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[2][1]\', \'y\');\n+---------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[2][1]\', \'y\') |\n+---------------------------------------+\n| [\"a\", {\"b\": [1, 2]}, [3, \"y\", 4]]     |\n+---------------------------------------+\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[0]\', \'x\', \'$[2][1]\', \'y\');\n+----------------------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[0]\', \'x\', \'$[2][1]\', \'y\') |\n+----------------------------------------------------+\n| [\"x\", \"a\", {\"b\": [1, 2]}, [3, 4]]                  |\n+----------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(396,'JSON_INSERT',32,'Syntax:\nJSON_INSERT(json_doc, path, val[, path, val] ...)\n\nInserts data into a JSON document and returns the result. Returns NULL\nif any argument is NULL. An error occurs if the json_doc argument is\nnot a valid JSON document or any path argument is not a valid path\nexpression or contains a * or ** wildcard.\n\nThe path-value pairs are evaluated left to right. The document produced\nby evaluating one pair becomes the new value against which the next\npair is evaluated.\n\nA path-value pair for an existing path in the document is ignored and\ndoes not overwrite the existing document value. A path-value pair for a\nnonexisting path in the document adds the value to the document if the\npath identifies one of these types of values:\n\no A member not present in an existing object. The member is added to\n  the object and associated with the new value.\n\no A position past the end of an existing array. The array is extended\n  with the new value. If the existing value is not an array, it is\n  autowrapped as an array, then extended with the new value.\n\nOtherwise, a path-value pair for a nonexisting path in the document is\nignored and has no effect.\n\nFor a comparison of JSON_INSERT(), JSON_REPLACE(), and JSON_SET(), see\nthe discussion of JSON_SET().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SET @j = \'{ \"a\": 1, \"b\": [2, 3]}\';\nmysql> SELECT JSON_INSERT(@j, \'$.a\', 10, \'$.c\', \'[true, false]\');\n+----------------------------------------------------+\n| JSON_INSERT(@j, \'$.a\', 10, \'$.c\', \'[true, false]\') |\n+----------------------------------------------------+\n| {\"a\": 1, \"b\": [2, 3], \"c\": \"[true, false]\"}        |\n+----------------------------------------------------+\n\nmysql> SELECT JSON_INSERT(@j, \'$.a\', 10, \'$.c\', CAST(\'[true, false]\' AS JSON));\n+------------------------------------------------------------------+\n| JSON_INSERT(@j, \'$.a\', 10, \'$.c\', CAST(\'[true, false]\' AS JSON)) |\n+------------------------------------------------------------------+\n| {\"a\": 1, \"b\": [2, 3], \"c\": [true, false]}                        |\n+------------------------------------------------------------------+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(397,'JSON_MERGE',32,'Syntax:\nJSON_MERGE(json_doc, json_doc[, json_doc] ...)\n\nMerges two or more JSON documents. Synonym for JSON_MERGE_PRESERVE();\ndeprecated in MySQL 8.0.3 and subject to removal in a future release.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SELECT JSON_MERGE(\'[1, 2]\', \'[true, false]\');\n+---------------------------------------+\n| JSON_MERGE(\'[1, 2]\', \'[true, false]\') |\n+---------------------------------------+\n| [1, 2, true, false]                   |\n+---------------------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS\\G\n*************************** 1. row ***************************\n  Level: Warning\n   Code: 1287\nMessage: \'JSON_MERGE\' is deprecated and will be removed in a future release. \\\n Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(398,'JSON_MERGE_PATCH()',32,'Syntax:\nJSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)\n\nPerforms an RFC 7396 (https://tools.ietf.org/html/rfc7396) compliant\nmerge of two or more JSON documents and returns the merged result,\nwithout preserving members having duplicate keys. Raises an error if at\nleast one of the documents passed as arguments to this function is not\nvalid.\n\n*Note*:\n\nFor an explanation and example of the differences between this function\nand JSON_MERGE_PRESERVE(), see\nhttps://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n#json-merge-patch-json-merge-preserve-compared.\n\nJSON_MERGE_PATCH() performs a merge as follows:\n\n1. If the first argument is not an object, the result of the merge is\n   the same as if an empty object had been merged with the second\n   argument.\n\n2. If the second argument is not an object, the result of the merge is\n   the second argument.\n\n3. If both arguments are objects, the result of the merge is an object\n   with the following members:\n\n  o All members of the first object which do not have a corresponding\n    member with the same key in the second object.\n\n  o All members of the second object which do not have a corresponding\n    key in the first object, and whose value is not the JSON null\n    literal.\n\n  o All members with a key that exists in both the first and the second\n    object, and whose value in the second object is not the JSON null\n    literal. The values of these members are the results of recursively\n    merging the value in the first object with the value in the second\n    object.\n\nFor additional information, see\nhttps://dev.mysql.com/doc/refman/8.0/en/json.html#json-normalization.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SELECT JSON_MERGE_PATCH(\'[1, 2]\', \'[true, false]\');\n+---------------------------------------------+\n| JSON_MERGE_PATCH(\'[1, 2]\', \'[true, false]\') |\n+---------------------------------------------+\n| [true, false]                               |\n+---------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PATCH(\'{\"name\": \"x\"}\', \'{\"id\": 47}\');\n+-------------------------------------------------+\n| JSON_MERGE_PATCH(\'{\"name\": \"x\"}\', \'{\"id\": 47}\') |\n+-------------------------------------------------+\n| {\"id\": 47, \"name\": \"x\"}                         |\n+-------------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PATCH(\'1\', \'true\');\n+-------------------------------+\n| JSON_MERGE_PATCH(\'1\', \'true\') |\n+-------------------------------+\n| true                          |\n+-------------------------------+\n\nmysql> SELECT JSON_MERGE_PATCH(\'[1, 2]\', \'{\"id\": 47}\');\n+------------------------------------------+\n| JSON_MERGE_PATCH(\'[1, 2]\', \'{\"id\": 47}\') |\n+------------------------------------------+\n| {\"id\": 47}                               |\n+------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PATCH(\'{ \"a\": 1, \"b\":2 }\',\n     >     \'{ \"a\": 3, \"c\":4 }\');\n+-----------------------------------------------------------+\n| JSON_MERGE_PATCH(\'{ \"a\": 1, \"b\":2 }\',\'{ \"a\": 3, \"c\":4 }\') |\n+-----------------------------------------------------------+\n| {\"a\": 3, \"b\": 2, \"c\": 4}                                  |\n+-----------------------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PATCH(\'{ \"a\": 1, \"b\":2 }\',\'{ \"a\": 3, \"c\":4 }\',\n     >     \'{ \"a\": 5, \"d\":6 }\');\n+-------------------------------------------------------------------------------+\n| JSON_MERGE_PATCH(\'{ \"a\": 1, \"b\":2 }\',\'{ \"a\": 3, \"c\":4 }\',\'{ \"a\": 5, \"d\":6 }\') |\n+-------------------------------------------------------------------------------+\n| {\"a\": 5, \"b\": 2, \"c\": 4, \"d\": 6}                                              |\n+-------------------------------------------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PATCH(\'{\"a\":1, \"b\":2}\', \'{\"b\":null}\');\n+--------------------------------------------------+\n| JSON_MERGE_PATCH(\'{\"a\":1, \"b\":2}\', \'{\"b\":null}\') |\n+--------------------------------------------------+\n| {\"a\": 1}                                         |\n+--------------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PATCH(\'{\"a\":{\"x\":1}}\', \'{\"a\":{\"y\":2}}\');\n+----------------------------------------------------+\n| JSON_MERGE_PATCH(\'{\"a\":{\"x\":1}}\', \'{\"a\":{\"y\":2}}\') |\n+----------------------------------------------------+\n| {\"a\": {\"x\": 1, \"y\": 2}}                            |\n+----------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(399,'JSON_MERGE_PRESERVE()',32,'Syntax:\nJSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)\n\nMerges two or more JSON documents and returns the merged result.\nReturns NULL if any argument is NULL. An error occurs if any argument\nis not a valid JSON document.\n\nMerging takes place according to the following rules. For additional\ninformation, see\nhttps://dev.mysql.com/doc/refman/8.0/en/json.html#json-normalization.\n\no Adjacent arrays are merged to a single array.\n\no Adjacent objects are merged to a single object.\n\no A scalar value is autowrapped as an array and merged as an array.\n\no An adjacent array and object are merged by autowrapping the object as\n  an array and merging the two arrays.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SELECT JSON_MERGE_PRESERVE(\'[1, 2]\', \'[true, false]\');\n+------------------------------------------------+\n| JSON_MERGE_PRESERVE(\'[1, 2]\', \'[true, false]\') |\n+------------------------------------------------+\n| [1, 2, true, false]                            |\n+------------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PRESERVE(\'{\"name\": \"x\"}\', \'{\"id\": 47}\');\n+----------------------------------------------------+\n| JSON_MERGE_PRESERVE(\'{\"name\": \"x\"}\', \'{\"id\": 47}\') |\n+----------------------------------------------------+\n| {\"id\": 47, \"name\": \"x\"}                            |\n+----------------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PRESERVE(\'1\', \'true\');\n+----------------------------------+\n| JSON_MERGE_PRESERVE(\'1\', \'true\') |\n+----------------------------------+\n| [1, true]                        |\n+----------------------------------+\n\nmysql> SELECT JSON_MERGE_PRESERVE(\'[1, 2]\', \'{\"id\": 47}\');\n+---------------------------------------------+\n| JSON_MERGE_PRESERVE(\'[1, 2]\', \'{\"id\": 47}\') |\n+---------------------------------------------+\n| [1, 2, {\"id\": 47}]                          |\n+---------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PRESERVE(\'{ \"a\": 1, \"b\": 2 }\',\n     >    \'{ \"a\": 3, \"c\": 4 }\');\n+--------------------------------------------------------------+\n| JSON_MERGE_PRESERVE(\'{ \"a\": 1, \"b\": 2 }\',\'{ \"a\": 3, \"c\":4 }\') |\n+--------------------------------------------------------------+\n| {\"a\": [1, 3], \"b\": 2, \"c\": 4}                                |\n+--------------------------------------------------------------+\n\nmysql> SELECT JSON_MERGE_PRESERVE(\'{ \"a\": 1, \"b\": 2 }\',\'{ \"a\": 3, \"c\": 4 }\',\n     >    \'{ \"a\": 5, \"d\": 6 }\');\n+----------------------------------------------------------------------------------+\n| JSON_MERGE_PRESERVE(\'{ \"a\": 1, \"b\": 2 }\',\'{ \"a\": 3, \"c\": 4 }\',\'{ \"a\": 5, \"d\": 6 }\') |\n+----------------------------------------------------------------------------------+\n| {\"a\": [1, 3, 5], \"b\": 2, \"c\": 4, \"d\": 6}                                         |\n+----------------------------------------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(400,'JSON_REMOVE',32,'Syntax:\nJSON_REMOVE(json_doc, path[, path] ...)\n\nRemoves data from a JSON document and returns the result. Returns NULL\nif any argument is NULL. An error occurs if the json_doc argument is\nnot a valid JSON document or any path argument is not a valid path\nexpression or is $ or contains a * or ** wildcard.\n\nThe path arguments are evaluated left to right. The document produced\nby evaluating one path becomes the new value against which the next\npath is evaluated.\n\nIt is not an error if the element to be removed does not exist in the\ndocument; in that case, the path does not affect the document.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SET @j = \'[\"a\", [\"b\", \"c\"], \"d\"]\';\nmysql> SELECT JSON_REMOVE(@j, \'$[1]\');\n+-------------------------+\n| JSON_REMOVE(@j, \'$[1]\') |\n+-------------------------+\n| [\"a\", \"d\"]              |\n+-------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(401,'JSON_REPLACE',32,'Syntax:\nJSON_REPLACE(json_doc, path, val[, path, val] ...)\n\nReplaces existing values in a JSON document and returns the result.\nReturns NULL if any argument is NULL. An error occurs if the json_doc\nargument is not a valid JSON document or any path argument is not a\nvalid path expression or contains a * or ** wildcard.\n\nThe path-value pairs are evaluated left to right. The document produced\nby evaluating one pair becomes the new value against which the next\npair is evaluated.\n\nA path-value pair for an existing path in the document overwrites the\nexisting document value with the new value. A path-value pair for a\nnonexisting path in the document is ignored and has no effect.\n\nIn MySQL 8.0.4, the optimizer can perform a partial, in-place update of\na JSON column instead of removing the old document and writing the new\ndocument in its entirety to the column. This optimization can be\nperformed for an update statement that uses the JSON_REPLACE() function\nand meets the conditions outlined in\nhttps://dev.mysql.com/doc/refman/8.0/en/json.html#json-partial-updates.\n\nFor a comparison of JSON_INSERT(), JSON_REPLACE(), and JSON_SET(), see\nthe discussion of JSON_SET().\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SET @j = \'{ \"a\": 1, \"b\": [2, 3]}\';\nmysql> SELECT JSON_REPLACE(@j, \'$.a\', 10, \'$.c\', \'[true, false]\');\n+-----------------------------------------------------+\n| JSON_REPLACE(@j, \'$.a\', 10, \'$.c\', \'[true, false]\') |\n+-----------------------------------------------------+\n| {\"a\": 10, \"b\": [2, 3]}                              |\n+-----------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(402,'JSON_SET',32,'Syntax:\nJSON_SET(json_doc, path, val[, path, val] ...)\n\nInserts or updates data in a JSON document and returns the result.\nReturns NULL if json_doc or path is NULL, or if path, when given, does\nnot locate an object. Otherwise, an error occurs if the json_doc\nargument is not a valid JSON document or any path argument is not a\nvalid path expression or contains a * or ** wildcard.\n\nThe path-value pairs are evaluated left to right. The document produced\nby evaluating one pair becomes the new value against which the next\npair is evaluated.\n\nA path-value pair for an existing path in the document overwrites the\nexisting document value with the new value. A path-value pair for a\nnonexisting path in the document adds the value to the document if the\npath identifies one of these types of values:\n\no A member not present in an existing object. The member is added to\n  the object and associated with the new value.\n\no A position past the end of an existing array. The array is extended\n  with the new value. If the existing value is not an array, it is\n  autowrapped as an array, then extended with the new value.\n\nOtherwise, a path-value pair for a nonexisting path in the document is\nignored and has no effect.\n\nIn MySQL 8.0.4, the optimizer can perform a partial, in-place update of\na JSON column instead of removing the old document and writing the new\ndocument in its entirety to the column. This optimization can be\nperformed for an update statement that uses the JSON_SET() function and\nmeets the conditions outlined in\nhttps://dev.mysql.com/doc/refman/8.0/en/json.html#json-partial-updates.\n\nThe JSON_SET(), JSON_INSERT(), and JSON_REPLACE() functions are\nrelated:\n\no JSON_SET() replaces existing values and adds nonexisting values.\n\no JSON_INSERT() inserts values without replacing existing values.\n\no JSON_REPLACE() replaces only existing values.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SET @j = \'{ \"a\": 1, \"b\": [2, 3]}\';\nmysql> SELECT JSON_SET(@j, \'$.a\', 10, \'$.c\', \'[true, false]\');\n+-------------------------------------------------+\n| JSON_SET(@j, \'$.a\', 10, \'$.c\', \'[true, false]\') |\n+-------------------------------------------------+\n| {\"a\": 10, \"b\": [2, 3], \"c\": \"[true, false]\"}    |\n+-------------------------------------------------+\nmysql> SELECT JSON_INSERT(@j, \'$.a\', 10, \'$.c\', \'[true, false]\');\n+----------------------------------------------------+\n| JSON_INSERT(@j, \'$.a\', 10, \'$.c\', \'[true, false]\') |\n+----------------------------------------------------+\n| {\"a\": 1, \"b\": [2, 3], \"c\": \"[true, false]\"}        |\n+----------------------------------------------------+\nmysql> SELECT JSON_REPLACE(@j, \'$.a\', 10, \'$.c\', \'[true, false]\');\n+-----------------------------------------------------+\n| JSON_REPLACE(@j, \'$.a\', 10, \'$.c\', \'[true, false]\') |\n+-----------------------------------------------------+\n| {\"a\": 10, \"b\": [2, 3]}                              |\n+-----------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(403,'JSON_UNQUOTE',32,'Syntax:\nJSON_UNQUOTE(json_val)\n\nUnquotes JSON value and returns the result as a utf8mb4 string. Returns\nNULL if the argument is NULL. An error occurs if the value starts and\nends with double quotes but is not a valid JSON string literal.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html\n\n','mysql> SET @j = \'\"abc\"\';\nmysql> SELECT @j, JSON_UNQUOTE(@j);\n+-------+------------------+\n| @j    | JSON_UNQUOTE(@j) |\n+-------+------------------+\n| \"abc\" | abc              |\n+-------+------------------+\nmysql> SET @j = \'[1, 2, 3]\';\nmysql> SELECT @j, JSON_UNQUOTE(@j);\n+-----------+------------------+\n| @j        | JSON_UNQUOTE(@j) |\n+-----------+------------------+\n| [1, 2, 3] | [1, 2, 3]        |\n+-----------+------------------+\n\nmysql> SELECT @@sql_mode;\n+------------+\n| @@sql_mode |\n+------------+\n|            |\n+------------+\n\nmysql> SELECT JSON_UNQUOTE(\'\"\\\\t\\\\u0032\"\');\n+------------------------------+\n| JSON_UNQUOTE(\'\"\\\\t\\\\u0032\"\') |\n+------------------------------+\n|       2                           |\n+------------------------------+\n\nmysql> SET @@sql_mode = \'NO_BACKSLASH_ESCAPES\';\nmysql> SELECT JSON_UNQUOTE(\'\"\\\\t\\\\u0032\"\');\n+------------------------------+\n| JSON_UNQUOTE(\'\"\\\\t\\\\u0032\"\') |\n+------------------------------+\n| \\t\\u0032                     |\n+------------------------------+\n\nmysql> SELECT JSON_UNQUOTE(\'\"\\t\\u0032\"\');\n+----------------------------+\n| JSON_UNQUOTE(\'\"\\t\\u0032\"\') |\n+----------------------------+\n|       2                         |\n+----------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html'),(404,'JSON_DEPTH',32,'Syntax:\nJSON_DEPTH(json_doc)\n\nReturns the maximum depth of a JSON document. Returns NULL if the\nargument is NULL. An error occurs if the argument is not a valid JSON\ndocument.\n\nAn empty array, empty object, or scalar value has depth 1. A nonempty\narray containing only elements of depth 1 or nonempty object containing\nonly member values of depth 1 has depth 2. Otherwise, a JSON document\nhas depth greater than 2.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html\n\n','mysql> SELECT JSON_DEPTH(\'{}\'), JSON_DEPTH(\'[]\'), JSON_DEPTH(\'true\');\n+------------------+------------------+--------------------+\n| JSON_DEPTH(\'{}\') | JSON_DEPTH(\'[]\') | JSON_DEPTH(\'true\') |\n+------------------+------------------+--------------------+\n|                1 |                1 |                  1 |\n+------------------+------------------+--------------------+\nmysql> SELECT JSON_DEPTH(\'[10, 20]\'), JSON_DEPTH(\'[[], {}]\');\n+------------------------+------------------------+\n| JSON_DEPTH(\'[10, 20]\') | JSON_DEPTH(\'[[], {}]\') |\n+------------------------+------------------------+\n|                      2 |                      2 |\n+------------------------+------------------------+\nmysql> SELECT JSON_DEPTH(\'[10, {\"a\": 20}]\');\n+-------------------------------+\n| JSON_DEPTH(\'[10, {\"a\": 20}]\') |\n+-------------------------------+\n|                             3 |\n+-------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html'),(405,'JSON_LENGTH',32,'Syntax:\nJSON_LENGTH(json_doc[, path])\n\nReturns the length of a JSON document, or, if a path argument is given,\nthe length of the value within the document identified by the path.\nReturns NULL if any argument is NULL or the path argument does not\nidentify a value in the document. An error occurs if the json_doc\nargument is not a valid JSON document or the path argument is not a\nvalid path expression. Prior to MySQL 8.0.26, an error is also raised\nif the path expression contains a * or ** wildcard.\n\nThe length of a document is determined as follows:\n\no The length of a scalar is 1.\n\no The length of an array is the number of array elements.\n\no The length of an object is the number of object members.\n\no The length does not count the length of nested arrays or objects.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html\n\n','mysql> SELECT JSON_LENGTH(\'[1, 2, {\"a\": 3}]\');\n+---------------------------------+\n| JSON_LENGTH(\'[1, 2, {\"a\": 3}]\') |\n+---------------------------------+\n|                               3 |\n+---------------------------------+\nmysql> SELECT JSON_LENGTH(\'{\"a\": 1, \"b\": {\"c\": 30}}\');\n+-----------------------------------------+\n| JSON_LENGTH(\'{\"a\": 1, \"b\": {\"c\": 30}}\') |\n+-----------------------------------------+\n|                                       2 |\n+-----------------------------------------+\nmysql> SELECT JSON_LENGTH(\'{\"a\": 1, \"b\": {\"c\": 30}}\', \'$.b\');\n+------------------------------------------------+\n| JSON_LENGTH(\'{\"a\": 1, \"b\": {\"c\": 30}}\', \'$.b\') |\n+------------------------------------------------+\n|                                              1 |\n+------------------------------------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html'),(406,'JSON_TYPE',32,'Syntax:\nJSON_TYPE(json_val)\n\nReturns a utf8mb4 string indicating the type of a JSON value. This can\nbe an object, an array, or a scalar type, as shown here:\n\nmysql> SET @j = \'{\"a\": [10, true]}\';\nmysql> SELECT JSON_TYPE(@j);\n+---------------+\n| JSON_TYPE(@j) |\n+---------------+\n| OBJECT        |\n+---------------+\nmysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, \'$.a\'));\n+------------------------------------+\n| JSON_TYPE(JSON_EXTRACT(@j, \'$.a\')) |\n+------------------------------------+\n| ARRAY                              |\n+------------------------------------+\nmysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, \'$.a[0]\'));\n+---------------------------------------+\n| JSON_TYPE(JSON_EXTRACT(@j, \'$.a[0]\')) |\n+---------------------------------------+\n| INTEGER                               |\n+---------------------------------------+\nmysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, \'$.a[1]\'));\n+---------------------------------------+\n| JSON_TYPE(JSON_EXTRACT(@j, \'$.a[1]\')) |\n+---------------------------------------+\n| BOOLEAN                               |\n+---------------------------------------+\n\nJSON_TYPE() returns NULL if the argument is NULL:\n\nmysql> SELECT JSON_TYPE(NULL);\n+-----------------+\n| JSON_TYPE(NULL) |\n+-----------------+\n| NULL            |\n+-----------------+\n\nAn error occurs if the argument is not a valid JSON value:\n\nmysql> SELECT JSON_TYPE(1);\nERROR 3146 (22032): Invalid data type for JSON data in argument 1\nto function json_type; a JSON string or JSON type is required.\n\nFor a non-NULL, non-error result, the following list describes the\npossible JSON_TYPE() return values:\n\no Purely JSON types:\n\n  o OBJECT: JSON objects\n\n  o ARRAY: JSON arrays\n\n  o BOOLEAN: The JSON true and false literals\n\n  o NULL: The JSON null literal\n\no Numeric types:\n\n  o INTEGER: MySQL TINYINT, SMALLINT, MEDIUMINT and INT and BIGINT\n    scalars\n\n  o DOUBLE: MySQL DOUBLE FLOAT scalars\n\n  o DECIMAL: MySQL DECIMAL and NUMERIC scalars\n\no Temporal types:\n\n  o DATETIME: MySQL DATETIME and TIMESTAMP scalars\n\n  o DATE: MySQL DATE scalars\n\n  o TIME: MySQL TIME scalars\n\no String types:\n\n  o STRING: MySQL utf8mb3 character type scalars: CHAR, VARCHAR, TEXT,\n    ENUM, and SET\n\no Binary types:\n\n  o BLOB: MySQL binary type scalars including BINARY, VARBINARY, BLOB,\n    and BIT\n\no All other types:\n\n  o OPAQUE (raw bits)\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html'),(407,'JSON_VALID',32,'Syntax:\nJSON_VALID(val)\n\nReturns 0 or 1 to indicate whether a value is valid JSON. Returns NULL\nif the argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html\n\n','mysql> SELECT JSON_VALID(\'{\"a\": 1}\');\n+------------------------+\n| JSON_VALID(\'{\"a\": 1}\') |\n+------------------------+\n|                      1 |\n+------------------------+\nmysql> SELECT JSON_VALID(\'hello\'), JSON_VALID(\'\"hello\"\');\n+---------------------+-----------------------+\n| JSON_VALID(\'hello\') | JSON_VALID(\'\"hello\"\') |\n+---------------------+-----------------------+\n|                   0 |                     1 |\n+---------------------+-----------------------+\n','https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html'),(408,'JSON_TABLE',32,'Syntax:\nJSON_TABLE(expr, path COLUMNS (column_list) [AS] alias)\n\nExtracts data from a JSON document and returns it as a relational table\nhaving the specified columns. The complete syntax for this function is\nshown here:\n\nJSON_TABLE(\n    expr,\n    path COLUMNS (column_list)\n)   [AS] alias\n\ncolumn_list:\n    column[, column][, ...]\n\ncolumn:\n    name FOR ORDINALITY\n    |  name type PATH string path [on_empty] [on_error]\n    |  name type EXISTS PATH string path\n    |  NESTED [PATH] path COLUMNS (column_list)\n\non_empty:\n    {NULL | DEFAULT json_string | ERROR} ON EMPTY\n\non_error:\n    {NULL | DEFAULT json_string | ERROR} ON ERROR\n\nexpr: This is an expression that returns JSON data. This can be a\nconstant (\'{\"a\":1}\'), a column (t1.json_data, given table t1 specified\nprior to JSON_TABLE() in the FROM clause), or a function call\n(JSON_EXTRACT(t1.json_data,\'$.post.comments\')).\n\npath: A JSON path expression, which is applied to the data source. We\nrefer to the JSON value matching the path as the row source; this is\nused to generate a row of relational data. The COLUMNS clause evaluates\nthe row source, finds specific JSON values within the row source, and\nreturns those JSON values as SQL values in individual columns of a row\nof relational data.\n\nThe alias is required. The usual rules for table aliases apply (see\nhttps://dev.mysql.com/doc/refman/8.0/en/identifiers.html).\n\nBeginning with MySQL 8.0.27, this function compares column names in\ncase-insensitive fashion.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html'),(409,'JSON_SCHEMA_VALID',32,'JSON_SCHEMA_VALID(schema,document)\n\nValidates a JSON document against a JSON schema. Both schema and\ndocument are required. The schema must be a valid JSON object; the\ndocument must be a valid JSON document. Provided that these conditions\nare met: If the document validates against the schema, the function\nreturns true (1); otherwise, it returns false (0).\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-validation-functions.html\n\n','mysql> SET @schema = \'{\n    \'>  \"id\": \"http://json-schema.org/geo\",\n    \'> \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n    \'> \"description\": \"A geographical coordinate\",\n    \'> \"type\": \"object\",\n    \'> \"properties\": {\n    \'>   \"latitude\": {\n    \'>     \"type\": \"number\",\n    \'>     \"minimum\": -90,\n    \'>     \"maximum\": 90\n    \'>   },\n    \'>   \"longitude\": {\n    \'>     \"type\": \"number\",\n    \'>     \"minimum\": -180,\n    \'>     \"maximum\": 180\n    \'>   }\n    \'> },\n    \'> \"required\": [\"latitude\", \"longitude\"]\n    \'>}\';\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SET @document = \'{\n    \'> \"latitude\": 63.444697,\n    \'> \"longitude\": 10.445118\n    \'>}\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT JSON_SCHEMA_VALID(@schema, @document);\n+---------------------------------------+\n| JSON_SCHEMA_VALID(@schema, @document) |\n+---------------------------------------+\n|                                     1 |\n+---------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SET @document = \'{}\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT JSON_SCHEMA_VALID(@schema, @document);\n+---------------------------------------+\n| JSON_SCHEMA_VALID(@schema, @document) |\n+---------------------------------------+\n|                                     0 |\n+---------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SET @schema = \'{\n    \'> \"id\": \"http://json-schema.org/geo\",\n    \'> \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n    \'> \"description\": \"A geographical coordinate\",\n    \'> \"type\": \"object\",\n    \'> \"properties\": {\n    \'>   \"latitude\": {\n    \'>     \"type\": \"number\",\n    \'>     \"minimum\": -90,\n    \'>     \"maximum\": 90\n    \'>   },\n    \'>   \"longitude\": {\n    \'>     \"type\": \"number\",\n    \'>     \"minimum\": -180,\n    \'>     \"maximum\": 180\n    \'>   }\n    \'> }\n    \'>}\';\nQuery OK, 0 rows affected (0.00 sec)\n\n\nmysql> SELECT JSON_SCHEMA_VALID(@schema, @document);\n+---------------------------------------+\n| JSON_SCHEMA_VALID(@schema, @document) |\n+---------------------------------------+\n|                                     1 |\n+---------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> CREATE TABLE geo (\n    ->     coordinate JSON,\n    ->     CHECK(\n    ->         JSON_SCHEMA_VALID(\n    ->             \'{\n    \'>                 \"type\":\"object\",\n    \'>                 \"properties\":{\n    \'>                       \"latitude\":{\"type\":\"number\", \"minimum\":-90, \"maximum\":90},\n    \'>                       \"longitude\":{\"type\":\"number\", \"minimum\":-180, \"maximum\":180}\n    \'>                 },\n    \'>                 \"required\": [\"latitude\", \"longitude\"]\n    \'>             }\',\n    ->             coordinate\n    ->         )\n    ->     )\n    -> );\nQuery OK, 0 rows affected (0.45 sec)\n\nmysql> SET @point1 = \'{\"latitude\":59, \"longitude\":18}\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SET @point2 = \'{\"latitude\":91, \"longitude\":0}\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SET @point3 = \'{\"longitude\":120}\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> INSERT INTO geo VALUES(@point1);\nQuery OK, 1 row affected (0.05 sec)\n\nmysql> INSERT INTO geo VALUES(@point2);\nERROR 3819 (HY000): Check constraint \'geo_chk_1\' is violated.\n\nmysql> SHOW WARNINGS\\G\n*************************** 1. row ***************************\n  Level: Error\n   Code: 3934\nMessage: The JSON document location \'#/latitude\' failed requirement \'maximum\' at\nJSON Schema location \'#/properties/latitude\'.\n*************************** 2. row ***************************\n  Level: Error\n   Code: 3819\nMessage: Check constraint \'geo_chk_1\' is violated.\n2 rows in set (0.00 sec)\n\nmysql> INSERT INTO geo VALUES(@point3);\nERROR 3819 (HY000): Check constraint \'geo_chk_1\' is violated.\nmysql> SHOW WARNINGS\\G\n*************************** 1. row ***************************\n  Level: Error\n   Code: 3934\nMessage: The JSON document location \'#\' failed requirement \'required\' at JSON\nSchema location \'#\'.\n*************************** 2. row ***************************\n  Level: Error\n   Code: 3819\nMessage: Check constraint \'geo_chk_1\' is violated.\n2 rows in set (0.00 sec)\n\nmysql> SELECT JSON_SCHEMA_VALID(\'{\"type\":\"string\",\"pattern\":\"(\"}\', \'\"abc\"\');\n+---------------------------------------------------------------+\n| JSON_SCHEMA_VALID(\'{\"type\":\"string\",\"pattern\":\"(\"}\', \'\"abc\"\') |\n+---------------------------------------------------------------+\n|                                                             1 |\n+---------------------------------------------------------------+\n1 row in set (0.04 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-validation-functions.html'),(410,'JSON_SCHEMA_VALIDATION_REPORT',32,'JSON_SCHEMA_VALIDATION_REPORT(schema,document)\n\nValidates a JSON document against a JSON schema. Both schema and\ndocument are required. As with JSON_VALID_SCHEMA(), the schema must be\na valid JSON object, and the document must be a valid JSON document.\nProvided that these conditions are met, the function returns a report,\nas a JSON document, on the outcome of the validation. If the JSON\ndocument is considered valid according to the JSON Schema, the function\nreturns a JSON object with one property valid having the value \"true\".\nIf the JSON document fails validation, the function returns a JSON\nobject which includes the properties listed here:\n\no valid: Always \"false\" for a failed schema validation\n\no reason: A human-readable string containing the reason for the failure\n\no schema-location: A JSON pointer URI fragment identifier indicating\n  where in the JSON schema the validation failed (see Note following\n  this list)\n\no document-location: A JSON pointer URI fragment identifier indicating\n  where in the JSON document the validation failed (see Note following\n  this list)\n\no schema-failed-keyword: A string containing the name of the keyword or\n  property in the JSON schema that was violated\n\n*Note*:\n\nJSON pointer URI fragment identifiers are defined in RFC 6901 -\nJavaScript Object Notation (JSON) Pointer\n(https://tools.ietf.org/html/rfc6901#page-5). (These are not the same\nas the JSON path notation used by JSON_EXTRACT() and other MySQL JSON\nfunctions.) In this notation, # represents the entire document, and\n#/myprop represents the portion of the document included in the\ntop-level property named myprop. See the specification just cited and\nthe examples shown later in this section for more information.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-validation-functions.html\n\n','mysql> SET @schema = \'{\n    \'>  \"id\": \"http://json-schema.org/geo\",\n    \'> \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n    \'> \"description\": \"A geographical coordinate\",\n    \'> \"type\": \"object\",\n    \'> \"properties\": {\n    \'>   \"latitude\": {\n    \'>     \"type\": \"number\",\n    \'>     \"minimum\": -90,\n    \'>     \"maximum\": 90\n    \'>   },\n    \'>   \"longitude\": {\n    \'>     \"type\": \"number\",\n    \'>     \"minimum\": -180,\n    \'>     \"maximum\": 180\n    \'>   }\n    \'> },\n    \'> \"required\": [\"latitude\", \"longitude\"]\n    \'>}\';\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SET @document = \'{\n    \'> \"latitude\": 63.444697,\n    \'> \"longitude\": 10.445118\n    \'>}\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT JSON_SCHEMA_VALIDATION_REPORT(@schema, @document);\n+---------------------------------------------------+\n| JSON_SCHEMA_VALIDATION_REPORT(@schema, @document) |\n+---------------------------------------------------+\n| {\"valid\": true}                                   |\n+---------------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SET @document = \'{\n    \'> \"latitude\": 63.444697,\n    \'> \"longitude\": 310.445118\n    \'> }\';\n\nmysql> SELECT JSON_PRETTY(JSON_SCHEMA_VALIDATION_REPORT(@schema, @document))\\G\n*************************** 1. row ***************************\nJSON_PRETTY(JSON_SCHEMA_VALIDATION_REPORT(@schema, @document)): {\n  \"valid\": false,\n  \"reason\": \"The JSON document location \'#/longitude\' failed requirement \'maximum\' at JSON Schema location \'#/properties/longitude\'\",\n  \"schema-location\": \"#/properties/longitude\",\n  \"document-location\": \"#/longitude\",\n  \"schema-failed-keyword\": \"maximum\"\n}\n1 row in set (0.00 sec)\n\nmysql> SET @document = \'{}\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT JSON_PRETTY(JSON_SCHEMA_VALIDATION_REPORT(@schema, @document))\\G\n*************************** 1. row ***************************\nJSON_PRETTY(JSON_SCHEMA_VALIDATION_REPORT(@schema, @document)): {\n  \"valid\": false,\n  \"reason\": \"The JSON document location \'#\' failed requirement \'required\' at JSON Schema location \'#\'\",\n  \"schema-location\": \"#\",\n  \"document-location\": \"#\",\n  \"schema-failed-keyword\": \"required\"\n}\n1 row in set (0.00 sec)\n\nmysql> SET @schema = \'{\n    \'> \"id\": \"http://json-schema.org/geo\",\n    \'> \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n    \'> \"description\": \"A geographical coordinate\",\n    \'> \"type\": \"object\",\n    \'> \"properties\": {\n    \'>   \"latitude\": {\n    \'>     \"type\": \"number\",\n    \'>     \"minimum\": -90,\n    \'>     \"maximum\": 90\n    \'>   },\n    \'>   \"longitude\": {\n    \'>     \"type\": \"number\",\n    \'>     \"minimum\": -180,\n    \'>     \"maximum\": 180\n    \'>   }\n    \'> }\n    \'>}\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT JSON_SCHEMA_VALIDATION_REPORT(@schema, @document);\n+---------------------------------------------------+\n| JSON_SCHEMA_VALIDATION_REPORT(@schema, @document) |\n+---------------------------------------------------+\n| {\"valid\": true}                                   |\n+---------------------------------------------------+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-validation-functions.html'),(411,'JSON_PRETTY',32,'JSON_PRETTY(json_val)\n\nProvides pretty-printing of JSON values similar to that implemented in\nPHP and by other languages and database systems. The value supplied\nmust be a JSON value or a valid string representation of a JSON value.\nExtraneous whitespaces and newlines present in this value have no\neffect on the output. For a NULL value, the function returns NULL. If\nthe value is not a JSON document, or if it cannot be parsed as one, the\nfunction fails with an error.\n\nFormatting of the output from this function adheres to the following\nrules:\n\no Each array element or object member appears on a separate line,\n  indented by one additional level as compared to its parent.\n\no Each level of indentation adds two leading spaces.\n\no A comma separating individual array elements or object members is\n  printed before the newline that separates the two elements or\n  members.\n\no The key and the value of an object member are separated by a colon\n  followed by a space (\': \').\n\no An empty object or array is printed on a single line. No space is\n  printed between the opening and closing brace.\n\no Special characters in string scalars and key names are escaped\n  employing the same rules used by the JSON_QUOTE() function.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html\n\n','mysql> SELECT JSON_PRETTY(\'123\'); # scalar\n+--------------------+\n| JSON_PRETTY(\'123\') |\n+--------------------+\n| 123                |\n+--------------------+\n\nmysql> SELECT JSON_PRETTY(\"[1,3,5]\"); # array\n+------------------------+\n| JSON_PRETTY(\"[1,3,5]\") |\n+------------------------+\n| [\n  1,\n  3,\n  5\n]      |\n+------------------------+\n\nmysql> SELECT JSON_PRETTY(\'{\"a\":\"10\",\"b\":\"15\",\"x\":\"25\"}\'); # object\n+---------------------------------------------+\n| JSON_PRETTY(\'{\"a\":\"10\",\"b\":\"15\",\"x\":\"25\"}\') |\n+---------------------------------------------+\n| {\n  \"a\": \"10\",\n  \"b\": \"15\",\n  \"x\": \"25\"\n}   |\n+---------------------------------------------+\n\nmysql> SELECT JSON_PRETTY(\'[\"a\",1,{\"key1\":\n    \'>    \"value1\"},\"5\",     \"77\" ,\n    \'>       {\"key2\":[\"value3\",\"valueX\",\n    \'> \"valueY\"]},\"j\", \"2\"   ]\')\\G  # nested arrays and objects\n*************************** 1. row ***************************\nJSON_PRETTY(\'[\"a\",1,{\"key1\":\n             \"value1\"},\"5\",     \"77\" ,\n                {\"key2\":[\"value3\",\"valuex\",\n          \"valuey\"]},\"j\", \"2\"   ]\'): [\n  \"a\",\n  1,\n  {\n    \"key1\": \"value1\"\n  },\n  \"5\",\n  \"77\",\n  {\n    \"key2\": [\n      \"value3\",\n      \"valuex\",\n      \"valuey\"\n    ]\n  },\n  \"j\",\n  \"2\"\n]\n','https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html'),(412,'JSON_STORAGE_FREE',32,'JSON_STORAGE_FREE(json_val)\n\nFor a JSON column value, this function shows how much storage space was\nfreed in its binary representation after it was updated in place using\nJSON_SET(), JSON_REPLACE(), or JSON_REMOVE(). The argument can also be\na valid JSON document or a string which can be parsed as one---either\nas a literal value or as the value of a user variable---in which case\nthe function returns 0. It returns a positive, nonzero value if the\nargument is a JSON column value which has been updated as described\npreviously, such that its binary representation takes up less space\nthan it did prior to the update. For a JSON column which has been\nupdated such that its binary representation is the same as or larger\nthan before, or if the update was not able to take advantage of a\npartial update, it returns 0; it returns NULL if the argument is NULL.\n\nIf json_val is not NULL, and neither is a valid JSON document nor can\nbe successfully parsed as one, an error results.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html\n\n','mysql> CREATE TABLE jtable (jcol JSON);\nQuery OK, 0 rows affected (0.38 sec)\n\nmysql> INSERT INTO jtable VALUES\n    ->     (\'{\"a\": 10, \"b\": \"wxyz\", \"c\": \"[true, false]\"}\');\nQuery OK, 1 row affected (0.04 sec)\n\nmysql> SELECT * FROM jtable;\n+----------------------------------------------+\n| jcol                                         |\n+----------------------------------------------+\n| {\"a\": 10, \"b\": \"wxyz\", \"c\": \"[true, false]\"} |\n+----------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> UPDATE jtable\n    ->     SET jcol = JSON_SET(jcol, \"$.a\", 10, \"$.b\", \"wxyz\", \"$.c\", 1);\nQuery OK, 1 row affected (0.03 sec)\nRows matched: 1  Changed: 1  Warnings: 0\n\nmysql> SELECT * FROM jtable;\n+--------------------------------+\n| jcol                           |\n+--------------------------------+\n| {\"a\": 10, \"b\": \"wxyz\", \"c\": 1} |\n+--------------------------------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_STORAGE_FREE(jcol) FROM jtable;\n+-------------------------+\n| JSON_STORAGE_FREE(jcol) |\n+-------------------------+\n|                      14 |\n+-------------------------+\n1 row in set (0.00 sec)\n\nmysql> UPDATE jtable\n    ->     SET jcol = JSON_SET(jcol, \"$.a\", 10, \"$.b\", \"wx\", \"$.c\", 1);\nQuery OK, 1 row affected (0.03 sec)\nRows matched: 1  Changed: 1  Warnings: 0\n\nmysql> SELECT JSON_STORAGE_FREE(jcol) FROM jtable;\n+-------------------------+\n| JSON_STORAGE_FREE(jcol) |\n+-------------------------+\n|                      16 |\n+-------------------------+\n1 row in set (0.00 sec)\n\nmysql> UPDATE jtable SET jcol = \'{\"a\": 10, \"b\": 1}\';\nQuery OK, 1 row affected (0.05 sec)\nRows matched: 1  Changed: 1  Warnings: 0\n\nmysql> SELECT JSON_STORAGE_FREE(jcol) FROM jtable;\n+-------------------------+\n| JSON_STORAGE_FREE(jcol) |\n+-------------------------+\n|                       0 |\n+-------------------------+\n1 row in set (0.00 sec)\n\nmysql> SET @j = \'{\"a\": 10, \"b\": \"wxyz\", \"c\": \"[true, false]\"}\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SET @j = JSON_SET(@j, \'$.a\', 10, \'$.b\', \'wxyz\', \'$.c\', \'1\');\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @j, JSON_STORAGE_FREE(@j) AS Free;\n+----------------------------------+------+\n| @j                               | Free |\n+----------------------------------+------+\n| {\"a\": 10, \"b\": \"wxyz\", \"c\": \"1\"} |    0 |\n+----------------------------------+------+\n1 row in set (0.00 sec)\n\nmysql> SELECT JSON_STORAGE_FREE(\'{\"a\": 10, \"b\": \"wxyz\", \"c\": \"1\"}\') AS Free;\n+------+\n| Free |\n+------+\n|    0 |\n+------+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html'),(413,'JSON_STORAGE_SIZE',32,'JSON_STORAGE_SIZE(json_val)\n\nThis function returns the number of bytes used to store the binary\nrepresentation of a JSON document. When the argument is a JSON column,\nthis is the space used to store the JSON document as it was inserted\ninto the column, prior to any partial updates that may have been\nperformed on it afterwards. json_val must be a valid JSON document or a\nstring which can be parsed as one. In the case where it is string, the\nfunction returns the amount of storage space in the JSON binary\nrepresentation that is created by parsing the string as JSON and\nconverting it to binary. It returns NULL if the argument is NULL.\n\nAn error results when json_val is not NULL, and is not---or cannot be\nsuccessfully parsed as---a JSON document.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html\n\n','mysql> CREATE TABLE jtable (jcol JSON);\nQuery OK, 0 rows affected (0.42 sec)\n\nmysql> INSERT INTO jtable VALUES\n    ->     (\'{\"a\": 1000, \"b\": \"wxyz\", \"c\": \"[1, 3, 5, 7]\"}\');\nQuery OK, 1 row affected (0.04 sec)\n\nmysql> SELECT\n    ->     jcol,\n    ->     JSON_STORAGE_SIZE(jcol) AS Size,\n    ->     JSON_STORAGE_FREE(jcol) AS Free\n    -> FROM jtable;\n+-----------------------------------------------+------+------+\n| jcol                                          | Size | Free |\n+-----------------------------------------------+------+------+\n| {\"a\": 1000, \"b\": \"wxyz\", \"c\": \"[1, 3, 5, 7]\"} |   47 |    0 |\n+-----------------------------------------------+------+------+\n1 row in set (0.00 sec)\n\nmysql> UPDATE jtable SET jcol = \n    ->     JSON_SET(jcol, \"$.b\", \"a\");\nQuery OK, 1 row affected (0.04 sec)\nRows matched: 1  Changed: 1  Warnings: 0\n\nmysql> SELECT\n    ->     jcol,\n    ->     JSON_STORAGE_SIZE(jcol) AS Size,\n    ->     JSON_STORAGE_FREE(jcol) AS Free\n    -> FROM jtable;\n+--------------------------------------------+------+------+\n| jcol                                       | Size | Free |\n+--------------------------------------------+------+------+\n| {\"a\": 1000, \"b\": \"a\", \"c\": \"[1, 3, 5, 7]\"} |   47 |    3 |\n+--------------------------------------------+------+------+\n1 row in set (0.00 sec)\n\nmysql> UPDATE jtable\nmysql>     SET jcol = \'{\"a\": 4.55, \"b\": \"wxyz\", \"c\": \"[true, false]\"}\';\nQuery OK, 1 row affected (0.04 sec)\nRows matched: 1  Changed: 1  Warnings: 0\n\nmysql> SELECT\n    ->     jcol,\n    ->     JSON_STORAGE_SIZE(jcol) AS Size,\n    ->     JSON_STORAGE_FREE(jcol) AS Free\n    -> FROM jtable;\n+------------------------------------------------+------+------+\n| jcol                                           | Size | Free |\n+------------------------------------------------+------+------+\n| {\"a\": 4.55, \"b\": \"wxyz\", \"c\": \"[true, false]\"} |   56 |    0 |\n+------------------------------------------------+------+------+\n1 row in set (0.00 sec)\n\nmysql> SET @j = \'[100, \"sakila\", [1, 3, 5], 425.05]\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @j, JSON_STORAGE_SIZE(@j) AS Size;\n+------------------------------------+------+\n| @j                                 | Size |\n+------------------------------------+------+\n| [100, \"sakila\", [1, 3, 5], 425.05] |   45 |\n+------------------------------------+------+\n1 row in set (0.00 sec)\n\nmysql> SET @j = JSON_SET(@j, \'$[1]\', \"json\");\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @j, JSON_STORAGE_SIZE(@j) AS Size;\n+----------------------------------+------+\n| @j                               | Size |\n+----------------------------------+------+\n| [100, \"json\", [1, 3, 5], 425.05] |   43 |\n+----------------------------------+------+\n1 row in set (0.00 sec)\n\nmysql> SET @j = JSON_SET(@j, \'$[2][0]\', JSON_ARRAY(10, 20, 30));\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @j, JSON_STORAGE_SIZE(@j) AS Size;\n+---------------------------------------------+------+\n| @j                                          | Size |\n+---------------------------------------------+------+\n| [100, \"json\", [[10, 20, 30], 3, 5], 425.05] |   56 |\n+---------------------------------------------+------+\n1 row in set (0.00 sec)\n\nmysql> SELECT\n    ->     JSON_STORAGE_SIZE(\'[100, \"sakila\", [1, 3, 5], 425.05]\') AS A,\n    ->     JSON_STORAGE_SIZE(\'{\"a\": 1000, \"b\": \"a\", \"c\": \"[1, 3, 5, 7]\"}\') AS B,\n    ->     JSON_STORAGE_SIZE(\'{\"a\": 1000, \"b\": \"wxyz\", \"c\": \"[1, 3, 5, 7]\"}\') AS C,\n    ->     JSON_STORAGE_SIZE(\'[100, \"json\", [[10, 20, 30], 3, 5], 425.05]\') AS D;\n+----+----+----+----+\n| A  | B  | C  | D  |\n+----+----+----+----+\n| 45 | 44 | 47 | 56 |\n+----+----+----+----+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html'),(414,'GTID_SUBSET',33,'Syntax:\nGTID_SUBSET(set1,set2)\n\nGiven two sets of global transaction identifiers set1 and set2, returns\ntrue if all GTIDs in set1 are also in set2. Returns NULL if set1 or\nset2 is NULL. Returns false otherwise.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\',\n    ->     \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\',\n    \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\',\n    ->     \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\',\n    \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\',\n    ->     \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\',\n    \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 0\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/gtid-functions.html'),(415,'GTID_SUBTRACT',33,'Syntax:\nGTID_SUBTRACT(set1,set2)\n\nGiven two sets of global transaction identifiers set1 and set2, returns\nonly those GTIDs from set1 that are not in set2. Returns NULL if set1\nor set2 is NULL.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n    ->     \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n    \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:22-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n    ->     \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n    \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:26-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n    ->     \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n    \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:21-22:25-57\n1 row in set (0.01 sec)\n','https://dev.mysql.com/doc/refman/8.0/en/gtid-functions.html'),(416,'WAIT_FOR_EXECUTED_GTID_SET',33,'Syntax:\nWAIT_FOR_EXECUTED_GTID_SET(gtid_set[, timeout])\n\nWait until the server has applied all of the transactions whose global\ntransaction identifiers are contained in gtid_set; that is, until the\ncondition GTID_SUBSET(gtid_subset, @@GLOBAL.gtid_executed) holds. See\nhttps://dev.mysql.com/doc/refman/8.0/en/replication-gtids-concepts.html\nfor a definition of GTID sets.\n\nIf a timeout is specified, and timeout seconds elapse before all of the\ntransactions in the GTID set have been applied, the function stops\nwaiting. timeout is optional, and the default timeout is 0 seconds, in\nwhich case the function always waits until all of the transactions in\nthe GTID set have been applied. timeout must be greater than or equal\nto 0; when running in strict SQL mode, a negative timeout value is\nimmediately rejected with an error (ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_wrong_arguments)); otherwise the function returns NULL,\nand raises a warning.\n\nWAIT_FOR_EXECUTED_GTID_SET() monitors all the GTIDs that are applied on\nthe server, including transactions that arrive from all replication\nchannels and user clients. It does not take into account whether\nreplication channels have been started or stopped.\n\nFor more information, see\nhttps://dev.mysql.com/doc/refman/8.0/en/replication-gtids.html.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gtid-functions.html\n\n','mysql> SELECT WAIT_FOR_EXECUTED_GTID_SET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5\');\n        -> 0\n','https://dev.mysql.com/doc/refman/8.0/en/gtid-functions.html'),(417,'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS',33,'Syntax:\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(gtid_set[, timeout][,channel])\n\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() is deprecated. Use\nWAIT_FOR_EXECUTED_GTID_SET() instead, which works regardless of the\nreplication channel or user client through which the specified\ntransactions arrive on the server.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/gtid-functions.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/gtid-functions.html'),(418,'MASTER_POS_WAIT',33,'Syntax:\nMASTER_POS_WAIT(log_name,log_pos[,timeout][,channel])\n\nThis function is for control of source-replica synchronization. It\nblocks until the replica has read and applied all updates up to the\nspecified position in the source\'s binary log. From MySQL 8.0.26,\nMASTER_POS_WAIT() is deprecated and the alias SOURCE_POS_WAIT() should\nbe used instead. In releases before MySQL 8.0.26, use\nMASTER_POS_WAIT().\n\nThe return value is the number of log events the replica had to wait\nfor to advance to the specified position. The function returns NULL if\nthe replication SQL thread is not started, the replica\'s source\ninformation is not initialized, the arguments are incorrect, or an\nerror occurs. It returns -1 if the timeout has been exceeded. If the\nreplication SQL thread stops while MASTER_POS_WAIT() is waiting, the\nfunction returns NULL. If the replica is past the specified position,\nthe function returns immediately.\n\nIf the binary log file position has been marked as invalid, the\nfunction waits until a valid file position is known. The binary log\nfile position can be marked as invalid when the CHANGE REPLICATION\nSOURCE TO option GTID_ONLY is set for the replication channel, and the\nserver is restarted or replication is stopped. The file position\nbecomes valid after a transaction is successfully applied past the\ngiven file position. If the applier does not reach the stated position,\nthe function waits until the timeout. Use a SHOW REPLICA STATUS\nstatement to check if the binary log file position has been marked as\ninvalid.\n\nOn a multithreaded replica, the function waits until expiry of the\nlimit set by the replica_checkpoint_group, slave_checkpoint_group,\nreplica_checkpoint_period or slave_checkpoint_period system variable,\nwhen the checkpoint operation is called to update the status of the\nreplica. Depending on the setting for the system variables, the\nfunction might therefore return some time after the specified position\nwas reached.\n\nIf binary log transaction compression is in use and the transaction\npayload at the specified position is compressed (as a\nTransaction_payload_event), the function waits until the whole\ntransaction has been read and applied, and the positions have updated.\n\nIf a timeout value is specified, MASTER_POS_WAIT() stops waiting when\ntimeout seconds have elapsed. timeout must be greater than or equal to\n0. (When the server is running in strict SQL mode, a negative timeout\nvalue is immediately rejected with ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_wrong_arguments); otherwise the function returns NULL, and\nraises a warning.)\n\nThe optional channel value enables you to name which replication\nchannel the function applies to. See\nhttps://dev.mysql.com/doc/refman/8.0/en/replication-channels.html for\nmore information.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/replication-functions-synchronization.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/replication-functions-synchronization.html'),(419,'SOURCE_POS_WAIT',33,'Syntax:\nSOURCE_POS_WAIT(log_name,log_pos[,timeout][,channel])\n\nThis function is for control of source-replica synchronization. It\nblocks until the replica has read and applied all updates up to the\nspecified position in the source\'s binary log. From MySQL 8.0.26, use\nSOURCE_POS_WAIT() in place of MASTER_POS_WAIT(), which is deprecated\nfrom that release. In releases before MySQL 8.0.26, use\nMASTER_POS_WAIT().\n\nThe return value is the number of log events the replica had to wait\nfor to advance to the specified position. The function returns NULL if\nthe replication SQL thread is not started, the replica\'s source\ninformation is not initialized, the arguments are incorrect, or an\nerror occurs. It returns -1 if the timeout has been exceeded. If the\nreplication SQL thread stops while SOURCE_POS_WAIT() is waiting, the\nfunction returns NULL. If the replica is past the specified position,\nthe function returns immediately.\n\nIf the binary log file position has been marked as invalid, the\nfunction waits until a valid file position is known. The binary log\nfile position can be marked as invalid when the CHANGE REPLICATION\nSOURCE TO option GTID_ONLY is set for the replication channel, and the\nserver is restarted or replication is stopped. The file position\nbecomes valid after a transaction is successfully applied past the\ngiven file position. If the applier does not reach the stated position,\nthe function waits until the timeout. Use a SHOW REPLICA STATUS\nstatement to check if the binary log file position has been marked as\ninvalid.\n\nOn a multithreaded replica, the function waits until expiry of the\nlimit set by the replica_checkpoint_group or replica_checkpoint_period\nsystem variable, when the checkpoint operation is called to update the\nstatus of the replica. Depending on the setting for the system\nvariables, the function might therefore return some time after the\nspecified position was reached.\n\nIf binary log transaction compression is in use and the transaction\npayload at the specified position is compressed (as a\nTransaction_payload_event), the function waits until the whole\ntransaction has been read and applied, and the positions have updated.\n\nIf a timeout value is specified, SOURCE_POS_WAIT() stops waiting when\ntimeout seconds have elapsed. timeout must be greater than or equal to\n0. (In strict SQL mode, a negative timeout value is immediately\nrejected with ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html\n#error_er_wrong_arguments); otherwise the function returns NULL, and\nraises a warning.)\n\nThe optional channel value enables you to name which replication\nchannel the function applies to. See\nhttps://dev.mysql.com/doc/refman/8.0/en/replication-channels.html for\nmore information.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/replication-functions-synchronization.html\n\n','','https://dev.mysql.com/doc/refman/8.0/en/replication-functions-synchronization.html'),(420,'AVG',34,'Syntax:\nAVG([DISTINCT] expr) [over_clause]\n\nReturns the average value of expr. The DISTINCT option can be used to\nreturn the average of the distinct values of expr.\n\nIf there are no matching rows, AVG() returns NULL. The function also\nreturns NULL if expr is NULL.\n\nThis function executes as a window function if over_clause is present.\nover_clause is as described in\nhttps://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html; it\ncannot be used with DISTINCT.\n\nURL: https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html\n\n','mysql> SELECT student_name, AVG(test_score)\n       FROM student\n       GROUP BY student_name;\n','https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html'),