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


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

CREATE TABLE `columns_priv` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Column_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
  PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`,`Column_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Column privileges';

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


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

CREATE TABLE `db` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  PRIMARY KEY (`Host`,`Db`,`User`),
  KEY `User` (`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin 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'),('localhost','phpmyadmin','phpmyadmin','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

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

CREATE TABLE `engine_cost` (
  `engine_name` varchar(64) NOT NULL,
  `device_type` int(11) 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,
  PRIMARY KEY (`cost_name`,`engine_name`,`device_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0;

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

INSERT INTO `engine_cost` VALUES ('default',0,'io_block_read_cost',NULL,'2022-01-18 17:00:03',NULL),('default',0,'memory_block_read_cost',NULL,'2022-01-18 17:00:03',NULL);

--
-- Table structure for table `event`
--

CREATE TABLE `event` (
  `db` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
  `name` char(64) NOT NULL DEFAULT '',
  `body` longblob NOT NULL,
  `definer` char(93) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
  `execute_at` datetime DEFAULT NULL,
  `interval_value` int(11) DEFAULT NULL,
  `interval_field` enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `last_executed` datetime DEFAULT NULL,
  `starts` datetime DEFAULT NULL,
  `ends` datetime DEFAULT NULL,
  `status` enum('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL DEFAULT 'ENABLED',
  `on_completion` enum('DROP','PRESERVE') NOT NULL DEFAULT 'DROP',
  `sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') NOT NULL DEFAULT '',
  `comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
  `originator` int(10) unsigned NOT NULL,
  `time_zone` char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM',
  `character_set_client` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `collation_connection` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `db_collation` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `body_utf8` longblob,
  PRIMARY KEY (`db`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Events';

--
-- Dumping data for table `event`
--


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

CREATE TABLE `func` (
  `name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `ret` tinyint(1) NOT NULL DEFAULT '0',
  `dl` char(128) COLLATE utf8_bin NOT NULL DEFAULT '',
  `type` enum('function','aggregate') CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='User defined functions';

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


--
-- 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(20) NOT NULL COMMENT 'First number of interval.',
  `interval_end` bigint(20) NOT NULL COMMENT 'Last number of interval.',
  PRIMARY KEY (`source_uuid`,`interval_start`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 STATS_PERSISTENT=0;

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

CREATE TABLE `help_category` (
  `help_category_id` smallint(5) unsigned NOT NULL,
  `name` char(64) NOT NULL,
  `parent_category_id` smallint(5) unsigned DEFAULT NULL,
  `url` text NOT NULL,
  PRIMARY KEY (`help_category_id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 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,'Procedures',0,''),(7,'Language Structure',0,''),(8,'Geographic Features',0,''),(9,'MBR',8,''),(10,'WKT',8,''),(11,'Comparison Operators',4,''),(12,'Logical Operators',4,''),(13,'Flow Control Functions',4,''),(14,'Numeric Functions',4,''),(15,'Date and Time Functions',4,''),(16,'String Functions',4,''),(17,'Cast Functions and Operators',4,''),(18,'XML',4,''),(19,'Bit Functions',4,''),(20,'Encryption Functions',4,''),(21,'Locking Functions',4,''),(22,'Information Functions',4,''),(23,'Spatial Functions',4,''),(24,'WKT Functions',23,''),(25,'WKB Functions',23,''),(26,'Geometry Constructors',23,''),(27,'Geometry Property Functions',23,''),(28,'Point Property Functions',23,''),(29,'LineString Property Functions',23,''),(30,'Polygon Property Functions',23,''),(31,'GeometryCollection Property Functions',23,''),(32,'Geometry Relation Functions',23,''),(33,'MBR Functions',23,''),(34,'GTID',4,''),(35,'Aggregate Functions and Modifiers',4,''),(36,'GROUP BY Functions and Modifiers',4,''),(37,'Miscellaneous Functions',4,''),(38,'Data Definition',0,''),(39,'Data Manipulation',0,''),(40,'Transactions',0,''),(41,'Replication Statements',0,''),(42,'Prepared Statements',0,''),(43,'Compound Statements',0,''),(44,'Account Management',0,''),(45,'Table Maintenance',0,''),(46,'Loadable Functions',0,''),(47,'Plugins',0,''),(48,'Utility',0,''),(49,'Storage Engines',0,'');

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

CREATE TABLE `help_keyword` (
  `help_keyword_id` int(10) unsigned NOT NULL,
  `name` char(64) NOT NULL,
  PRIMARY KEY (`help_keyword_id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='help keywords';

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

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

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

CREATE TABLE `help_relation` (
  `help_topic_id` int(10) unsigned NOT NULL,
  `help_keyword_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`help_keyword_id`,`help_topic_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='keyword-topic relation';

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

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

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

CREATE TABLE `help_topic` (
  `help_topic_id` int(10) unsigned NOT NULL,
  `name` char(64) NOT NULL,
  `help_category_id` smallint(5) unsigned NOT NULL,
  `description` text NOT NULL,
  `example` text NOT NULL,
  `url` text NOT NULL,
  PRIMARY KEY (`help_topic_id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 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 5.7 Reference Manual\non: 2021-09-06\n','',''),(1,'HELP_VERSION',1,'This help information was generated from the MySQL 5.7 Reference Manual\non: 2021-09-06 (revision: 70755)\n\nThis information applies to MySQL 5.7 through 5.7.35.\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/5.7/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/5.7/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/5.7/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 |\n+---------------+-----------+\n| binlog.000015 |    724935 |\n| binlog.000016 |    733481 |\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/5.7/en/mysql-server-side-help.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/mysql-server-side-help.html'),(4,'ASYMMETRIC_DECRYPT',5,'Syntax:\nasymmetric_decrypt(algorithm, crypt_str, 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\nkey_str must be a valid key string in PEM format. For successful\ndecryption, it must be the public or private key string corresponding\nto the private or public key string used with asymmetric_encrypt() to\nproduce the encrypted string. algorithm indicates the encryption\nalgorithm used to create the key.\n\nSupported algorithm values: \'RSA\'\n\nFor a usage example, see the description of asymmetric_encrypt().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'),(5,'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 must be valid key strings in PEM format.\nThey must be 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\nURL: https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'),(6,'ASYMMETRIC_ENCRYPT',5,'Syntax:\nasymmetric_encrypt(algorithm, str, 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\nThe str length cannot be greater than the key_str length − 11, in\nbytes\n\nkey_str must be a valid key string in PEM format. algorithm indicates\nthe encryption algorithm used to create the key.\n\nSupported algorithm values: \'RSA\'\n\nTo encrypt a string, pass a private or public key string to\nasymmetric_encrypt(). To recover the original unencrypted string, pass\nthe encrypted string to asymmetric_decrypt(), along with the public or\nprivate key string correponding to the private or public key string\nused for encryption.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','-- Generate private/public key pair\nSET @priv = create_asymmetric_priv_key(\'RSA\', 1024);\nSET @pub = create_asymmetric_pub_key(\'RSA\', @priv);\n\n-- Encrypt using private key, decrypt using public key\nSET @ciphertext = asymmetric_encrypt(\'RSA\', \'The quick brown fox\', @priv);\nSET @plaintext = asymmetric_decrypt(\'RSA\', @ciphertext, @pub);\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/5.7/en/enterprise-encryption-functions.html'),(7,'ASYMMETRIC_SIGN',5,'Syntax:\nasymmetric_sign(algorithm, digest_str, priv_key_str, digest_type)\n\nSigns a digest string using a private key string, and returns the\nsignature as a binary string. If signing fails, the result is NULL.\n\ndigest_str is the digest string. It can be generated by calling\ncreate_digest(). digest_type indicates the digest algorithm used to\ngenerate the digest string.\n\npriv_key_str is the private key string to use for signing the digest\nstring. It must be a valid key string in PEM format. algorithm\nindicates the encryption algorithm used to create the key.\n\nSupported algorithm values: \'RSA\', \'DSA\'\n\nSupported digest_type values: \'SHA224\', \'SHA256\', \'SHA384\', \'SHA512\'\n\nFor a usage example, see the description of asymmetric_verify().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'),(8,'ASYMMETRIC_VERIFY',5,'Syntax:\nasymmetric_verify(algorithm, digest_str, sig_str, pub_key_str,\ndigest_type)\n\nVerifies whether the signature string matches the digest string, and\nreturns 1 or 0 to indicate whether verification succeeded or failed.\n\ndigest_str is the digest string. It can be generated by calling\ncreate_digest(). digest_type indicates the digest algorithm used to\ngenerate the digest string.\n\nsig_str is the signature string. It can be generated by calling\nasymmetric_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 and must be a valid key string in PEM format. algorithm\nindicates the encryption algorithm used to create the key.\n\nSupported algorithm values: \'RSA\', \'DSA\'\n\nSupported digest_type values: \'SHA224\', \'SHA256\', \'SHA384\', \'SHA512\'\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','-- Set the encryption algorithm and digest type\nSET @algo = \'RSA\';\nSET @dig_type = \'SHA224\';\n\n-- Create private/public key pair\nSET @priv = create_asymmetric_priv_key(@algo, 1024);\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/5.7/en/enterprise-encryption-functions.html'),(9,'CREATE_ASYMMETRIC_PRIV_KEY',5,'Syntax:\ncreate_asymmetric_priv_key(algorithm, {key_len|dh_secret})\n\nCreates a private key using the given algorithm and key length or DH\nsecret, and returns the key as a binary string in PEM format. If key\ngeneration fails, the result is NULL.\n\nSupported algorithm values: \'RSA\', \'DSA\', \'DH\'\n\nSupported key_len values: The minimum key length in bits is 1,024. The\nmaximum key length depends on the algorithm: 16,384 for RSA and 10,000\nfor DSA. These key-length limits are constraints imposed by OpenSSL.\nServer administrators can impose additional limits on maximum key\nlength by setting environment variables. See\nhttps://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-usage.htm\nl.\n\nFor DH keys, pass a shared DH secret instead of a key length. To create\nthe secret, pass the key length to create_dh_parameters().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','SET @priv = create_asymmetric_priv_key(\'DSA\', 2048);\nSET @pub = create_asymmetric_pub_key(\'DSA\', @priv);\n','https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'),(10,'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. If key\nderivation fails, the result is NULL.\n\npriv_key_str must be a valid key string in PEM format. algorithm\nindicates the encryption algorithm used to create the key.\n\nSupported algorithm values: \'RSA\', \'DSA\', \'DH\'\n\nFor a usage example, see the description of\ncreate_asymmetric_priv_key().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'),(11,'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\nSupported key_len values: 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 environment variables. See\nhttps://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-usage.htm\nl.\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/5.7/en/enterprise-encryption-functions.html\n\n','SET @dhp = create_dh_parameters(1024);\n','https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'),(12,'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\nSupported digest_type values: \'SHA224\', \'SHA256\', \'SHA384\', \'SHA512\'\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','SET @dig = create_digest(\'SHA512\', The quick brown fox\');\n','https://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'),(13,'PROCEDURE ANALYSE',6,'Syntax:\nANALYSE([max_elements[,max_memory]])\n\n*Note*:\n\nPROCEDURE ANALYSE() is deprecated as of MySQL 5.7.18, and is removed in\nMySQL 8.0.\n\nANALYSE() examines the result from a query and returns an analysis of\nthe results that suggests optimal data types for each column that may\nhelp reduce table sizes. To obtain this analysis, append PROCEDURE\nANALYSE to the end of a SELECT statement:\n\nSELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])\n\nFor example:\n\nSELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);\n\nThe results show some statistics for the values returned by the query,\nand propose an optimal data type for the columns. This can be helpful\nfor checking your existing tables, or after importing new data. You may\nneed to try different settings for the arguments so that PROCEDURE\nANALYSE() does not suggest the ENUM data type when it is not\nappropriate.\n\nThe arguments are optional and are used as follows:\n\no max_elements (default 256) is the maximum number of distinct values\n  that ANALYSE() notices per column. This is used by ANALYSE() to check\n  whether the optimal data type should be of type ENUM; if there are\n  more than max_elements distinct values, then ENUM is not a suggested\n  type.\n\no max_memory (default 8192) is the maximum amount of memory that\n  ANALYSE() should allocate per column while trying to find all\n  distinct values.\n\nA PROCEDURE clause is not permitted in a UNION statement.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/procedure-analyse.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/procedure-analyse.html'),(14,'FLUSH QUERY CACHE',3,'You can defragment the query cache to better utilize its memory with\nthe FLUSH QUERY CACHE statement. The statement does not remove any\nqueries from the cache.\n\nThe RESET QUERY CACHE statement removes all query results from the\nquery cache. The FLUSH TABLES statement also does this.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/query-cache-status-and-maintenance.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/query-cache-status-and-maintenance.html'),(15,'TRUE',7,'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/5.7/en/boolean-literals.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/boolean-literals.html'),(16,'FALSE',7,'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/5.7/en/boolean-literals.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/boolean-literals.html'),(17,'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/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(18,'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/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(19,'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/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(20,'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/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(21,'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/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(22,'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/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(23,'INTEGER',2,'INTEGER[(M)] [UNSIGNED] [ZEROFILL]\n\nThis type is a synonym for INT.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(24,'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/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(25,'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/5.7/en/precision-math-expressions.html\n.)\n\nUNSIGNED, if specified, disallows negative values.\n\nAll basic calculations (+, -, *, /) with DECIMAL columns are done with\na precision of 65 digits.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(26,'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/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(27,'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.\n\nUNSIGNED, if specified, disallows negative values.\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/5.7/en/no-matching-rows.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(28,'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.\n\nUNSIGNED, if specified, disallows negative values.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(29,'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/5.7/en/numeric-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/numeric-type-syntax.html'),(30,'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/5.7/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-syntax.html'),(31,'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.999999\'. 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/5.7/en/timestamp-initialization.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-syntax.html'),(32,'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.999999\' 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/5.7/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/5.7/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-syntax.html'),(33,'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/5.7/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-syntax.html'),(34,'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\n*Note*:\n\nThe YEAR(2) data type is deprecated and support for it is removed in\nMySQL 5.7.5. To convert 2-digit YEAR(2) columns to 4-digit YEAR\ncolumns, see\nhttps://dev.mysql.com/doc/refman/5.7/en/migrating-from-year2.html.\n\nFor additional information about YEAR display format and interpretation\nof input values, see https://dev.mysql.com/doc/refman/5.7/en/year.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-syntax.html'),(35,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(36,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(37,'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, utf8\ncharacters can require up to three bytes per character, so a VARCHAR\ncolumn that uses the utf8 character set can be declared to be a maximum\nof 21,844 characters. See\nhttps://dev.mysql.com/doc/refman/5.7/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 utf8 as this predefined character\nset. https://dev.mysql.com/doc/refman/5.7/en/charset-national.html.\nNVARCHAR is shorthand for NATIONAL VARCHAR.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(38,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(39,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(40,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(41,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(42,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(43,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(44,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(45,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(46,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(47,'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/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(48,'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. (The\npractical limit is less than 3000.) A table can have no more than 255\nunique element list definitions among its ENUM and SET columns\nconsidered as a group. For more information on these limits, see\nhttps://dev.mysql.com/doc/refman/5.7/en/create-table-files.html#limits-\nfrm-file.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(49,'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. A table can\nhave no more than 255 unique element list definitions among its ENUM\nand SET columns considered as a group. For more information on this\nlimit, see\nhttps://dev.mysql.com/doc/refman/5.7/en/create-table-files.html#limits-\nfrm-file.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html'),(50,'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/5.7/en/storage-requirements.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/blob.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/blob.html'),(51,'GEOMETRY HIERARCHY',8,'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/5.7/en/gis-geometry-class-hierarchy.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-geometry-class-hierarchy.html'),(52,'MBR DEFINITION',9,'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/5.7/en/gis-class-geometry.html\n\n','((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))\n','https://dev.mysql.com/doc/refman/5.7/en/gis-class-geometry.html'),(53,'WKT DEFINITION',10,'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/5.7/en/spatial-types.html).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html'),(54,'SPATIAL COLUMNS',8,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/creating-spatial-columns.html\n\n','CREATE TABLE geom (g GEOMETRY);\n','https://dev.mysql.com/doc/refman/5.7/en/creating-spatial-columns.html'),(55,'SPATIAL INDEXES',8,'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, SPATIAL INDEX(g));\n\no With ALTER TABLE:\n\nCREATE TABLE geom (g GEOMETRY NOT NULL);\nALTER TABLE geom ADD SPATIAL INDEX(g);\n\no With CREATE INDEX:\n\nCREATE TABLE geom (g GEOMETRY NOT NULL);\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\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/5.7/en/creating-spatial-indexes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/creating-spatial-indexes.html'),(56,'=',11,'=\n\nEqual:\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/comparison-operators.html'),(57,'<=>',11,'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/5.7/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/5.7/en/comparison-operators.html'),(58,'!=',11,'Syntax:\n<>, !=\n\nNot equal:\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/comparison-operators.html'),(59,'<=',11,'Syntax:\n<=\n\nLess than or equal:\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 0.1 <= 2;\n        -> 1\n','https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'),(60,'<',11,'Syntax:\n<\n\nLess than:\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 2 < 2;\n        -> 0\n','https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'),(61,'>=',11,'Syntax:\n>=\n\nGreater than or equal:\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 2 >= 2;\n        -> 1\n','https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'),(62,'>',11,'Syntax:\n>\n\nGreater than:\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 2 > 2;\n        -> 0\n','https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'),(63,'BETWEEN AND',11,'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/5.7/en/type-conversion.html, but\napplied to all the three arguments.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/comparison-operators.html'),(64,'NOT BETWEEN',11,'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/5.7/en/comparison-operators.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'),(65,'COALESCE',11,'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/5.7/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/5.7/en/comparison-operators.html'),(66,'GREATEST',11,'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/5.7/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/5.7/en/comparison-operators.html'),(67,'IN',11,'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/5.7/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 constants of the same type, and expr can be\ncompared to each of them as a value of the same type (possibly after\ntype conversion), an optimization takes place. The values the list are\nsorted and the search for expr is done using a binary search, which\nmakes the IN() operation very quick.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/comparison-operators.html'),(68,'NOT IN',11,'Syntax:\nexpr NOT IN (value,...)\n\nThis is the same as NOT (expr IN (value,...)).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'),(69,'INTERVAL',11,'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 binary\nsearch is used (very fast).\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/comparison-operators.html'),(70,'IS',11,'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/5.7/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/5.7/en/comparison-operators.html'),(71,'IS NOT',11,'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/5.7/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/5.7/en/comparison-operators.html'),(72,'IS NULL',11,'Syntax:\nIS NULL\n\nTests whether a value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/comparison-operators.html'),(73,'IS NOT NULL',11,'Syntax:\nIS NOT NULL\n\nTests whether a value is not NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/comparison-operators.html'),(74,'ISNULL',11,'Syntax:\nISNULL(expr)\n\nIf expr is NULL, ISNULL() returns 1, otherwise it returns 0.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/comparison-operators.html'),(75,'LEAST',11,'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 numbers.\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/5.7/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/5.7/en/comparison-operators.html'),(76,'!',12,'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/5.7/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/5.7/en/logical-operators.html'),(77,'AND',12,'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/5.7/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/5.7/en/logical-operators.html'),(78,'OR',12,'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/5.7/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/5.7/en/logical-operators.html'),(79,'XOR',12,'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/5.7/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/5.7/en/logical-operators.html'),(80,'ASSIGN-VALUE',12,'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/5.7/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/5.7/en/assignment-operators.html'),(81,'ASSIGN-EQUAL',12,'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/5.7/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/5.7/en/assignment-operators.html'),(82,'CASE OPERATOR',13,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/flow-control-functions.html'),(83,'IF FUNCTION',13,'Syntax:\nIF(expr1,expr2,expr3)\n\nIf expr1 is TRUE (expr1 <> 0 and expr1 <=> NULL), IF() returns expr2.\nOtherwise, 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/5.7/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/5.7/en/flow-control-functions.html'),(84,'IFNULL',13,'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/5.7/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/5.7/en/flow-control-functions.html'),(85,'NULLIF',13,'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/5.7/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/5.7/en/flow-control-functions.html'),(86,'+',14,'Syntax:\n+\n\nAddition:\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html\n\n','mysql> SELECT 3+5;\n        -> 8\n','https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html'),(87,'- BINARY',14,'Syntax:\n-\n\nSubtraction:\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html\n\n','mysql> SELECT 3-5;\n        -> -2\n','https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html'),(88,'- UNARY',14,'Syntax:\n-\n\nUnary minus. This operator changes the sign of the operand.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html\n\n','mysql> SELECT - 2;\n        -> -2\n','https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html'),(89,'*',14,'Syntax:\n*\n\nMultiplication:\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/arithmetic-functions.html'),(90,'/',14,'Syntax:\n/\n\nDivision:\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html\n\n','mysql> SELECT 3/5;\n        -> 0.60\n','https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html'),(91,'DIV',14,'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/5.7/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/5.7/en/arithmetic-functions.html'),(92,'%',14,'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/5.7/en/mathematical-functions.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html'),(93,'ABS',14,'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/5.7/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/5.7/en/mathematical-functions.html'),(94,'ACOS',14,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(95,'ASIN',14,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(96,'ATAN',14,'Syntax:\nATAN(X)\n\nReturns the arc tangent of X, that is, the value whose tangent is X.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(97,'ATAN2',14,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(98,'CEIL',14,'Syntax:\nCEIL(X)\n\nCEIL() is a synonym for CEILING().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'),(99,'CEILING',14,'Syntax:\nCEILING(X)\n\nReturns the smallest integer value not less than X.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(100,'CONV',14,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(101,'COS',14,'Syntax:\nCOS(X)\n\nReturns the cosine of X, where X is given in radians.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT COS(PI());\n        -> -1\n','https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'),(102,'COT',14,'Syntax:\nCOT(X)\n\nReturns the cotangent of X.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(103,'CRC32',14,'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/5.7/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/5.7/en/mathematical-functions.html'),(104,'DEGREES',14,'Syntax:\nDEGREES(X)\n\nReturns the argument X, converted from radians to degrees.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(105,'EXP',14,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(106,'FLOOR',14,'Syntax:\nFLOOR(X)\n\nReturns the largest integer value not greater than X.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT FLOOR(1.23), FLOOR(-1.23);\n        -> 1, -2\n','https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'),(107,'LN',14,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(108,'LOG',14,'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.\n\nThe inverse of this function (when called with a single argument) is\nthe EXP() function.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(109,'LOG2',14,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(110,'LOG10',14,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(111,'MOD',14,'Syntax:\nMOD(N,M), N % M, N MOD M\n\nModulo operation. Returns the remainder of N divided by M.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(112,'PI',14,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT PI();\n        -> 3.141593\nmysql> SELECT PI()+0.000000000000000000;\n        -> 3.141592653589793116\n','https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'),(113,'POW',14,'Syntax:\nPOW(X,Y)\n\nReturns the value of X raised to the power of Y.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(114,'POWER',14,'Syntax:\nPOWER(X,Y)\n\nThis is a synonym for POW().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'),(115,'RADIANS',14,'Syntax:\nRADIANS(X)\n\nReturns the argument X, converted from degrees to radians. (Note that\nπ radians equals 180 degrees.)\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT RADIANS(90);\n        -> 1.5707963267949\n','https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'),(116,'RAND',14,'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/5.7/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/5.7/en/mathematical-functions.html'),(117,'ROUND',14,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(118,'SIGN',14,'Syntax:\nSIGN(X)\n\nReturns the sign of the argument as -1, 0, or 1, depending on whether X\nis negative, zero, or positive.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(119,'SIN',14,'Syntax:\nSIN(X)\n\nReturns the sine of X, where X is given in radians.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(120,'SQRT',14,'Syntax:\nSQRT(X)\n\nReturns the square root of a nonnegative number X.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(121,'TAN',14,'Syntax:\nTAN(X)\n\nReturns the tangent of X, where X is given in radians.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(122,'TRUNCATE',14,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/mathematical-functions.html'),(123,'ADDDATE',15,'Syntax:\nADDDATE(date,INTERVAL expr unit), ADDDATE(expr,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/5.7/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/5.7/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/5.7/en/date-and-time-functions.html'),(124,'ADDTIME',15,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(125,'CONVERT_TZ',15,'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/5.7/en/time-zone-support.html. This\nfunction returns NULL if the arguments are invalid.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(126,'CURDATE',15,'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/5.7/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/5.7/en/date-and-time-functions.html'),(127,'CURRENT_DATE',15,'Syntax:\nCURRENT_DATE, CURRENT_DATE()\n\nCURRENT_DATE and CURRENT_DATE() are synonyms for CURDATE().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(128,'CURRENT_TIME',15,'Syntax:\nCURRENT_TIME, CURRENT_TIME([fsp])\n\nCURRENT_TIME and CURRENT_TIME() are synonyms for CURTIME().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(129,'CURRENT_TIMESTAMP',15,'Syntax:\nCURRENT_TIMESTAMP, CURRENT_TIMESTAMP([fsp])\n\nCURRENT_TIMESTAMP and CURRENT_TIMESTAMP() are synonyms for NOW().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(130,'CURTIME',15,'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/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT CURTIME();\n        -> \'23:50:26\'\nmysql> SELECT CURTIME() + 0;\n        -> 235026.000000\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(131,'DATE FUNCTION',15,'Syntax:\nDATE(expr)\n\nExtracts the date part of the date or datetime expression expr.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(132,'DATEDIFF',15,'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/5.7/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/5.7/en/date-and-time-functions.html'),(133,'DATE_ADD',15,'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/5.7/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/5.7/en/date-and-time-functions.html'),(134,'DATE_FORMAT',15,'Syntax:\nDATE_FORMAT(date,format)\n\nFormats the date value according to the format string.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(135,'DATE_SUB',15,'Syntax:\nDATE_SUB(date,INTERVAL expr unit)\n\nSee the description for DATE_ADD().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(136,'DAY',15,'Syntax:\nDAY(date)\n\nDAY() is a synonym for DAYOFMONTH().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(137,'DAYNAME',15,'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(https://dev.mysql.com/doc/refman/5.7/en/locale-support.html).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT DAYNAME(\'2007-02-03\');\n        -> \'Saturday\'\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(138,'DAYOFMONTH',15,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFMONTH(\'2007-02-03\');\n        -> 3\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(139,'DAYOFWEEK',15,'Syntax:\nDAYOFWEEK(date)\n\nReturns the weekday index for date (1 = Sunday, 2 = Monday, ..., 7 =\nSaturday). These index values correspond to the ODBC standard.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFWEEK(\'2007-02-03\');\n        -> 7\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(140,'DAYOFYEAR',15,'Syntax:\nDAYOFYEAR(date)\n\nReturns the day of the year for date, in the range 1 to 366.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFYEAR(\'2007-02-03\');\n        -> 34\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(141,'EXTRACT',15,'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/5.7/en/expressions.html#temporal-inter\nvals.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(142,'FROM_DAYS',15,'Syntax:\nFROM_DAYS(N)\n\nGiven a day number N, returns a DATE value.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT FROM_DAYS(730669);\n        -> \'2000-07-03\'\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(143,'FROM_UNIXTIME',15,'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/5.7/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 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\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/5.7/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/5.7/en/date-and-time-functions.html'),(144,'GET_FORMAT',15,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(145,'HOUR',15,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(146,'LAST_DAY',15,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(147,'LOCALTIME',15,'Syntax:\nLOCALTIME, LOCALTIME([fsp])\n\nLOCALTIME and LOCALTIME() are synonyms for NOW().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(148,'LOCALTIMESTAMP',15,'Syntax:\nLOCALTIMESTAMP, LOCALTIMESTAMP([fsp])\n\nLOCALTIMESTAMP and LOCALTIMESTAMP() are synonyms for NOW().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(149,'MAKEDATE',15,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(150,'MAKETIME',15,'Syntax:\nMAKETIME(hour,minute,second)\n\nReturns a time value calculated from the hour, minute, and second\narguments.\n\nThe second argument can have a fractional part.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(151,'MICROSECOND',15,'Syntax:\nMICROSECOND(expr)\n\nReturns the microseconds from the time or datetime expression expr as a\nnumber in the range from 0 to 999999.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(152,'MINUTE',15,'Syntax:\nMINUTE(time)\n\nReturns the minute for time, in the range 0 to 59.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(153,'MONTH',15,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT MONTH(\'2008-02-03\');\n        -> 2\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(154,'MONTHNAME',15,'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/5.7/en/locale-support.html).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT MONTHNAME(\'2008-02-03\');\n        -> \'February\'\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(155,'NOW',15,'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/5.7/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/5.7/en/date-and-time-functions.html'),(156,'PERIOD_ADD',15,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT PERIOD_ADD(200801,2);\n        -> 200803\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(157,'PERIOD_DIFF',15,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT PERIOD_DIFF(200802,200703);\n        -> 11\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(158,'QUARTER',15,'Syntax:\nQUARTER(date)\n\nReturns the quarter of the year for date, in the range 1 to 4.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT QUARTER(\'2008-04-01\');\n        -> 2\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(159,'SECOND',15,'Syntax:\nSECOND(time)\n\nReturns the second for time, in the range 0 to 59.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT SECOND(\'10:05:03\');\n        -> 3\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(160,'SEC_TO_TIME',15,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(161,'STR_TO_DATE',15,'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 the date,\ntime, or datetime value extracted from str is illegal, STR_TO_DATE()\nreturns NULL and produces a warning.\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/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(162,'SUBDATE',15,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(163,'SUBTIME',15,'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/5.7/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/5.7/en/date-and-time-functions.html'),(164,'SYSDATE',15,'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 source 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/5.7/en/date-and-time-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(165,'TIME FUNCTION',15,'Syntax:\nTIME(expr)\n\nExtracts the time part of the time or datetime expression expr and\nreturns it as a string.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(166,'TIMEDIFF',15,'Syntax:\nTIMEDIFF(expr1,expr2)\n\nTIMEDIFF() returns expr1 − expr2 expressed as a time value. expr1 and\nexpr2 are time or date-and-time expressions, but both must be of the\nsame type.\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/5.7/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/5.7/en/date-and-time-functions.html'),(167,'TIMESTAMP FUNCTION',15,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(168,'TIMESTAMPADD',15,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(169,'TIMESTAMPDIFF',15,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(170,'TIME_FORMAT',15,'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 value or 0.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(171,'TIME_TO_SEC',15,'Syntax:\nTIME_TO_SEC(time)\n\nReturns the time argument, converted to seconds.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(172,'TO_DAYS',15,'Syntax:\nTO_DAYS(date)\n\nGiven a date date, returns a day number (the number of days since year\n0).\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(173,'TO_SECONDS',15,'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, returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(174,'UNIX_TIMESTAMP',15,'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/5.7/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\nThe valid range of argument values is the same as for the TIMESTAMP\ndata type: \'1970-01-01 00:00:01.000000\' UTC to \'2038-01-19\n03:14:07.999999\' UTC. If you pass an out-of-range date to\nUNIX_TIMESTAMP(), it returns 0.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(175,'UTC_DATE',15,'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/5.7/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/5.7/en/date-and-time-functions.html'),(176,'UTC_TIME',15,'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/5.7/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/5.7/en/date-and-time-functions.html'),(177,'UTC_TIMESTAMP',15,'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/5.7/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/5.7/en/date-and-time-functions.html'),(178,'WEEK',15,'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/5.7/en/server-system-variables.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(179,'WEEKDAY',15,'Syntax:\nWEEKDAY(date)\n\nReturns the weekday index for date (0 = Monday, 1 = Tuesday, ... 6 =\nSunday).\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/date-and-time-functions.html'),(180,'WEEKOFYEAR',15,'Syntax:\nWEEKOFYEAR(date)\n\nReturns the calendar week of the date as a number in the range from 1\nto 53. WEEKOFYEAR() is a compatibility function that is equivalent to\nWEEK(date,3).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT WEEKOFYEAR(\'2008-02-20\');\n        -> 8\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(181,'YEAR',15,'Syntax:\nYEAR(date)\n\nReturns the year for date, in the range 1000 to 9999, or 0 for the\n\"zero\" date.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT YEAR(\'1987-01-01\');\n        -> 1987\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(182,'YEARWEEK',15,'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.\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/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT YEARWEEK(\'1987-01-01\');\n        -> 198652\n','https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'),(183,'ASCII',16,'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/5.7/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/5.7/en/string-functions.html'),(184,'BIN',16,'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/5.7/en/string-functions.html\n\n','mysql> SELECT BIN(12);\n        -> \'1100\'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(185,'BIT_LENGTH',16,'Syntax:\nBIT_LENGTH(str)\n\nReturns the length of the string str in bits.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT BIT_LENGTH(\'text\');\n        -> 32\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(186,'CHAR FUNCTION',16,'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 CHARSET(CHAR(X\'65\')), CHARSET(CHAR(X\'65\' USING utf8));\n+----------------------+---------------------------------+\n| CHARSET(CHAR(X\'65\')) | CHARSET(CHAR(X\'65\' USING utf8)) |\n+----------------------+---------------------------------+\n| binary               | utf8                            |\n+----------------------+---------------------------------+\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/5.7/en/mysql.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT CHAR(77,121,83,81,\'76\');\n        -> \'MySQL\'\nmysql> SELECT CHAR(77,77.3,\'77.3\');\n        -> \'MMM\'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(187,'CHAR_LENGTH',16,'Syntax:\nCHAR_LENGTH(str)\n\nReturns the length of the string str, measured in characters. A\nmultibyte character counts as a single character. This means that for a\nstring containing five 2-byte characters, LENGTH() returns 10, whereas\nCHAR_LENGTH() returns 5.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(188,'CHARACTER_LENGTH',16,'Syntax:\nCHARACTER_LENGTH(str)\n\nCHARACTER_LENGTH() is a synonym for CHAR_LENGTH().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(189,'CONCAT',16,'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/5.7/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/5.7/en/string-functions.html'),(190,'CONCAT_WS',16,'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/5.7/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/5.7/en/string-functions.html'),(191,'ELT',16,'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 or greater\nthan the number of arguments. ELT() is the complement of FIELD().\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/string-functions.html'),(192,'EXPORT_SET',16,'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/5.7/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/5.7/en/string-functions.html'),(193,'FIELD',16,'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/5.7/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/5.7/en/string-functions.html'),(194,'FIND_IN_SET',16,'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/5.7/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/5.7/en/string-functions.html'),(195,'FORMAT',16,'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.\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/5.7/en/locale-support.html). If no\nlocale is specified, the default is \'en_US\'.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/string-functions.html'),(196,'FROM_BASE64',16,'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/5.7/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/5.7/en/string-functions.html'),(197,'HEX',16,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/string-functions.html'),(198,'INSERT FUNCTION',16,'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/5.7/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/5.7/en/string-functions.html'),(199,'INSTR',16,'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/5.7/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/5.7/en/string-functions.html'),(200,'LCASE',16,'Syntax:\nLCASE(str)\n\nLCASE() is a synonym for LOWER().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(201,'LEFT',16,'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/5.7/en/string-functions.html\n\n','mysql> SELECT LEFT(\'foobarbar\', 5);\n        -> \'fooba\'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(202,'LENGTH',16,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT LENGTH(\'text\');\n        -> 4\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(203,'LOAD_FILE',16,'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 all 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.\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/5.7/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/5.7/en/string-functions.html'),(204,'LOCATE',16,'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 substr\nor str is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/string-functions.html'),(205,'LOWER',16,'Syntax:\nLOWER(str)\n\nReturns the string str with all characters changed to lowercase\naccording to the current character set mapping. The default is latin1\n(cp1252 West European).\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 latin1));\n+-------------+-----------------------------------+\n| LOWER(@str) | LOWER(CONVERT(@str USING latin1)) |\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, utf8_unicode_520_ci works according to UCA\n5.2.0, whereas utf8_unicode_ci works according to UCA 4.0.0. See\nhttps://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(206,'LPAD',16,'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/5.7/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/5.7/en/string-functions.html'),(207,'LTRIM',16,'Syntax:\nLTRIM(str)\n\nReturns the string str with leading space characters removed.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT LTRIM(\'  barbar\');\n        -> \'barbar\'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(208,'MAKE_SET',16,'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/5.7/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/5.7/en/string-functions.html'),(209,'MID',16,'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/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(210,'OCT',16,'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/5.7/en/string-functions.html\n\n','mysql> SELECT OCT(12);\n        -> \'14\'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(211,'OCTET_LENGTH',16,'Syntax:\nOCTET_LENGTH(str)\n\nOCTET_LENGTH() is a synonym for LENGTH().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(212,'ORD',16,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT ORD(\'2\');\n        -> 50\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(213,'POSITION',16,'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/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(214,'QUOTE',16,'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/5.7/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/5.7/en/string-functions.html'),(215,'REPEAT FUNCTION',16,'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 are NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT REPEAT(\'MySQL\', 3);\n        -> \'MySQLMySQLMySQL\'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(216,'REPLACE FUNCTION',16,'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/5.7/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/5.7/en/string-functions.html'),(217,'REVERSE',16,'Syntax:\nREVERSE(str)\n\nReturns the string str with the order of the characters reversed.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT REVERSE(\'abc\');\n        -> \'cba\'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(218,'RIGHT',16,'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/5.7/en/string-functions.html\n\n','mysql> SELECT RIGHT(\'foobarbar\', 4);\n        -> \'rbar\'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(219,'RPAD',16,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/string-functions.html'),(220,'RTRIM',16,'Syntax:\nRTRIM(str)\n\nReturns the string str with trailing space characters removed.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT RTRIM(\'barbar   \');\n        -> \'barbar\'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(221,'SOUNDEX',16,'Syntax:\nSOUNDEX(str)\n\nReturns a soundex string from str. Two strings that sound almost the\nsame should have identical soundex strings. A standard soundex string\nis four characters long, but the SOUNDEX() function returns an\narbitrarily long string. You can use SUBSTRING() on the result to get a\nstandard soundex string. All nonalphabetic characters in str are\nignored. All international alphabetic characters outside the A-Z range\nare 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/5.7/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/5.7/en/string-functions.html'),(222,'SOUNDS LIKE',16,'Syntax:\nexpr1 SOUNDS LIKE expr2\n\nThis is the same as SOUNDEX(expr1) = SOUNDEX(expr2).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(223,'SPACE',16,'Syntax:\nSPACE(N)\n\nReturns a string consisting of N space characters.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT SPACE(6);\n        -> \'      \'\n','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(224,'SUBSTR',16,'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/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(225,'SUBSTRING',16,'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/5.7/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/5.7/en/string-functions.html'),(226,'SUBSTRING_INDEX',16,'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/5.7/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/5.7/en/string-functions.html'),(227,'TO_BASE64',16,'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/5.7/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/5.7/en/string-functions.html'),(228,'TRIM',16,'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/5.7/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/5.7/en/string-functions.html'),(229,'UCASE',16,'Syntax:\nUCASE(str)\n\nUCASE() is a synonym for UPPER().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(230,'UNHEX',16,'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/5.7/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/5.7/en/string-functions.html'),(231,'UPPER',16,'Syntax:\nUPPER(str)\n\nReturns the string str with all characters changed to uppercase\naccording to the current character set mapping. The default is latin1\n(cp1252 West European).\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/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(232,'WEIGHT_STRING',16,'Syntax:\nWEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])\n\nlevels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...\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. It has these 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/5.7/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 LEVEL clause: Optional; specify weight levels for the return value.\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 = _latin1 \'AB\' COLLATE latin1_swedish_ci;\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 = _latin1 \'ab\' COLLATE latin1_swedish_ci;\nmysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));\n+------+---------+------------------------+\n| @s   | HEX(@s) | HEX(WEIGHT_STRING(@s)) |\n+------+---------+------------------------+\n| ab   | 6162    | 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   | 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/5.7/en/string-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-functions.html'),(233,'LIKE',16,'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/5.7/en/string-types.html).\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/string-comparison-functions.html'),(234,'NOT LIKE',16,'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/5.7/en/string-comparison-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html'),(235,'STRCMP',16,'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 1 otherwise.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/string-comparison-functions.html'),(236,'NOT REGEXP',16,'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/5.7/en/regexp.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/regexp.html'),(237,'REGEXP',16,'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 either expr or pat is NULL, the\nreturn value is NULL.\n\nRLIKE is a synonym for REGEXP.\n\nThe pattern can be an extended regular expression, the syntax for which\nis discussed in\nhttps://dev.mysql.com/doc/refman/5.7/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\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\nRegular expression operations use the character set and collation of\nthe string expression and pattern 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/5.7/en/charset-collation-coercibility.\nhtml. If either argument is a binary string, the arguments are handled\nin case-sensitive fashion as binary strings.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/regexp.html'),(238,'MATCH AGAINST',16,'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/5.7/en/fulltext-search-ngram.html,\n  and\n  https://dev.mysql.com/doc/refman/5.7/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. MATCH()\ntakes a comma-separated list that names the columns to be searched.\nAGAINST takes a string to search for, and an optional modifier that\nindicates what type of search to perform. The search string must be a\nstring value that is constant during query evaluation. This rules out,\nfor example, a table column because that can differ for each row.\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/5.7/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/5.7/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/5.7/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/5.7/en/fulltext-query-expansion.html\n  .\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html\n\n','mysql> SELECT id, body, MATCH (title,body) AGAINST\n    (\'Security implications of running MySQL as root\'\n    IN NATURAL LANGUAGE MODE) AS score\n    FROM articles WHERE MATCH (title,body) AGAINST\n    (\'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/5.7/en/fulltext-search.html'),(239,'BINARY OPERATOR',17,'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/5.7/en/charset-binary-collations.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html\n\n','mysql> 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/5.7/en/cast-functions.html'),(240,'CAST',17,'Syntax:\nCAST(expr AS type)\n\nCAST(expr AS type takes an expression of any type and produces a result\nvalue of the specified type. This operation may also be expressed as\nCONVERT(expr, type), which is equivalent.\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/5.7/en/binary-varbinary.html.\n\no CHAR[(N)] [charset_info]\n\n  Produces a string with the VARCHAR data type. except that when the\n  expression expr is empty (zero length), the result type is CHAR(0).\n  If the optional length N is given, CHAR(N) causes the cast to use no\n  more than N characters of the argument. No padding occurs for values\n  shorter than N characters. If the optional length N is not given,\n  MySQL calculates the maximum length from the expression. If the\n  supplied or calculated length is greater than an internal threshold,\n  the result type is TEXT. If the length is still too long, the result\n  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 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/5.7/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/5.7/en/charset-national.html.\n\n  Unlike CHAR, NCHAR does not permit trailing character set information\n  to be specified.\n\no SIGNED [INTEGER]\n\n  Produces a signed BIGINT value.\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\nURL: https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html'),(241,'CONVERT',17,'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.\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 utf8 character set:\n\nSELECT CONVERT(\'abc\' USING utf8);\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/5.7/en/cast-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html'),(242,'EXTRACTVALUE',18,'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.\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/5.7/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/5.7/en/xml-functions.html'),(243,'UPDATEXML',18,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/xml-functions.html'),(244,'|',19,'Syntax:\n|\n\nBitwise OR.\n\nThe result is an unsigned 64-bit integer.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html\n\n','mysql> SELECT 29 | 15;\n        -> 31\n','https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html'),(245,'&',19,'Syntax:\n&\n\nBitwise AND.\n\nThe result is an unsigned 64-bit integer.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html\n\n','mysql> SELECT 29 & 15;\n        -> 13\n','https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html'),(246,'^',19,'Syntax:\n^\n\nBitwise XOR.\n\nThe result is an unsigned 64-bit integer.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html\n\n','mysql> SELECT 1 ^ 1;\n        -> 0\nmysql> SELECT 1 ^ 0;\n        -> 1\nmysql> SELECT 11 ^ 3;\n        -> 8\n','https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html'),(247,'<<',19,'Syntax:\n<<\n\nShifts a longlong (BIGINT) number to the left.\n\nThe result is an unsigned 64-bit integer. The value is truncated to 64\nbits. In particular, if the shift count is greater or equal to the\nwidth of an unsigned 64-bit number, the result is zero.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html\n\n','mysql> SELECT 1 << 2;\n        -> 4\n','https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html'),(248,'>>',19,'Syntax:\n>>\n\nShifts a longlong (BIGINT) number to the right.\n\nThe result is an unsigned 64-bit integer. The value is truncated to 64\nbits. In particular, if the shift count is greater or equal to the\nwidth of an unsigned 64-bit number, the result is zero.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html\n\n','mysql> SELECT 4 >> 2;\n        -> 1\n','https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html'),(249,'~',19,'Syntax:\n~\n\nInvert all bits.\n\nThe result is an unsigned 64-bit integer.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html\n\n','mysql> SELECT 5 & ~1;\n        -> 4\n','https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html'),(250,'BIT_COUNT',19,'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/5.7/en/bit-functions.html\n\n','mysql> SELECT BIT_COUNT(29), BIT_COUNT(b\'101010\');\n        -> 4, 3\n','https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html'),(251,'AES_DECRYPT',20,'Syntax:\nAES_DECRYPT(crypt_str,key_str[,init_vector])\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 and cannot be stored in the query cache.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(252,'AES_ENCRYPT',20,'Syntax:\nAES_ENCRYPT(str,key_str[,init_vector])\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 plaintext string. If either function argument\nis NULL, the function returns NULL.\n\nThe str and crypt_str arguments can be any length, and padding is\nautomatically added to str so it is a multiple of a block as required\nby block-based algorithms such as AES. This padding is automatically\nremoved by the AES_DECRYPT() function. The length of crypt_str can be\ncalculated using this formula:\n\n16 * (trunc(string_length / 16) + 1)\n\nFor a key length of 128 bits, the most secure way to pass a key to the\nkey_str argument is to create a truly random 128-bit value and pass it\nas a binary value. For example:\n\nINSERT INTO t\nVALUES (1,AES_ENCRYPT(\'text\',UNHEX(\'F3229A0B371ED2D9441B830D21A390C3\')));\n\nA passphrase can be used to generate an AES key by hashing the\npassphrase. For example:\n\nINSERT INTO t\nVALUES (1,AES_ENCRYPT(\'text\', UNHEX(SHA2(\'My secret passphrase\',512))));\n\nDo not pass a password or passphrase directly to crypt_str, hash it\nfirst. Previous versions of this documentation suggested the former\napproach, but it is no longer recommended as the examples shown here\nare more secure.\n\nIf AES_DECRYPT() detects invalid data or incorrect padding, it returns\nNULL. However, it is possible for AES_DECRYPT() to return a non-NULL\nvalue (possibly garbage) if the input data or the key is invalid.\n\nAES_ENCRYPT() and AES_DECRYPT() permit control of the block encryption\nmode and take an optional init_vector initialization vector argument:\n\no The block_encryption_mode system variable controls the mode for\n  block-based encryption algorithms. Its default value is aes-128-ecb,\n  which signifies encryption using a key length of 128 bits and ECB\n  mode. For a description of the permitted values of this variable, see\n  https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\no The optional init_vector argument provides an initialization vector\n  for block encryption modes that require it.\n\nFor modes that require the optional init_vector argument, it must be 16\nbytes or longer (bytes in excess of 16 are ignored). An error occurs if\ninit_vector is missing.\n\nFor modes that do not require init_vector, it is ignored and a warning\nis generated if it is specified.\n\nA random string of bytes to use for the initialization vector can be\nproduced by calling RANDOM_BYTES(16). For encryption modes that require\nan initialization vector, the same vector must be used for encryption\nand decryption.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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 AES_DECRYPT(@crypt_str,@key_str,@init_vector);\n+-----------------------------------------------+\n| AES_DECRYPT(@crypt_str,@key_str,@init_vector) |\n+-----------------------------------------------+\n| text                                          |\n+-----------------------------------------------+\n','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(253,'COMPRESS',20,'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\ncompressed string can be uncompressed with UNCOMPRESS().\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/encryption-functions.html'),(254,'DECODE',20,'Syntax:\nDECODE(crypt_str,pass_str)\n\nDECODE() decrypts the encrypted string crypt_str using pass_str as the\npassword. crypt_str should be a string returned from ENCODE().\n\n*Note*:\n\nThe ENCODE() and DECODE() functions are deprecated in MySQL 5.7, and\nshould no longer be used. Expect them to be removed in a future MySQL\nrelease. Consider using AES_ENCRYPT() and AES_DECRYPT() instead.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(255,'DES_DECRYPT',20,'Syntax:\nDES_DECRYPT(crypt_str[,key_str])\n\nDecrypts a string encrypted with DES_ENCRYPT(). If an error occurs,\nthis function returns NULL.\n\nThis function works only if MySQL has been configured with SSL support.\nSee https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html.\n\nIf no key_str argument is given, DES_DECRYPT() examines the first byte\nof the encrypted string to determine the DES key number that was used\nto encrypt the original string, and then reads the key from the DES key\nfile to decrypt the message. For this to work, the user must have the\nSUPER privilege. The key file can be specified with the --des-key-file\nserver option.\n\nIf you pass this function a key_str argument, that string is used as\nthe key for decrypting the message.\n\nIf the crypt_str argument does not appear to be an encrypted string,\nMySQL returns the given crypt_str.\n\n*Note*:\n\nThe DES_ENCRYPT() and DES_DECRYPT() functions are deprecated in MySQL\n5.7, are removed in MySQL 8.0, and should no longer be used. Consider\nusing AES_ENCRYPT() and AES_DECRYPT() instead.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(256,'DES_ENCRYPT',20,'Syntax:\nDES_ENCRYPT(str[,{key_num|key_str}])\n\nEncrypts the string with the given key using the Triple-DES algorithm.\n\nThis function works only if MySQL has been configured with SSL support.\nSee https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html.\n\nThe encryption key to use is chosen based on the second argument to\nDES_ENCRYPT(), if one was given. With no argument, the first key from\nthe DES key file is used. With a key_num argument, the given key number\n(0 to 9) from the DES key file is used. With a key_str argument, the\ngiven key string is used to encrypt str.\n\nThe key file can be specified with the --des-key-file server option.\n\nThe return string is a binary string where the first character is\nCHAR(128 | key_num). If an error occurs, DES_ENCRYPT() returns NULL.\n\nThe 128 is added to make it easier to recognize an encrypted key. If\nyou use a string key, key_num is 127.\n\nThe string length for the result is given by this formula:\n\nnew_len = orig_len + (8 - (orig_len % 8)) + 1\n\nEach line in the DES key file has the following format:\n\nkey_num des_key_str\n\nEach key_num value must be a number in the range from 0 to 9. Lines in\nthe file may be in any order. des_key_str is the string that is used to\nencrypt the message. There should be at least one space between the\nnumber and the key. The first key is the default key that is used if\nyou do not specify any key argument to DES_ENCRYPT().\n\nYou can tell MySQL to read new key values from the key file with the\nFLUSH DES_KEY_FILE statement. This requires the RELOAD privilege.\n\nOne benefit of having a set of default keys is that it gives\napplications a way to check for the existence of encrypted column\nvalues, without giving the end user the right to decrypt those values.\n\n*Note*:\n\nThe DES_ENCRYPT() and DES_DECRYPT() functions are deprecated in MySQL\n5.7, are removed in MySQL 8.0, and should no longer be used. Consider\nusing AES_ENCRYPT() and AES_DECRYPT() instead.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT customer_address FROM customer_table \n     > WHERE crypted_credit_card = DES_ENCRYPT(\'credit_card_number\');\n','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(257,'ENCODE',20,'Syntax:\nENCODE(str,pass_str)\n\nENCODE() encrypts str using pass_str as the password. The result is a\nbinary string of the same length as str. To decrypt the result, use\nDECODE().\n\n*Note*:\n\nThe ENCODE() and DECODE() functions are deprecated in MySQL 5.7, and\nshould no longer be used. Expect them to be removed in a future MySQL\nrelease.\n\nIf you still need to use ENCODE(), a salt value must be used with it to\nreduce risk. For example:\n\nENCODE(\'cleartext\', CONCAT(\'my_random_salt\',\'my_secret_password\'))\n\nA new random salt value must be used whenever a password is updated.\n\nIf ENCODE() 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/5.7/en/mysql.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(258,'ENCRYPT',20,'Syntax:\nENCRYPT(str[,salt])\n\nEncrypts str using the Unix crypt() system call and returns a binary\nstring. The salt argument must be a string with at least two characters\nor else the result is NULL. If no salt argument is given, a random\nvalue is used.\n\n*Note*:\n\nThe ENCRYPT() function is deprecated in MySQL 5.7, are removed in MySQL\n8.0, and should no longer be used. For one-way hashing, consider using\nSHA2() instead.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT ENCRYPT(\'hello\');\n        -> \'VxuFAJXVARROc\'\n','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(259,'MD5',20,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT MD5(\'testing\');\n        -> \'ae2b1fca515949e5d54fb22b8ed95575\'\n','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(260,'PASSWORD',20,'Syntax:\nPASSWORD(str)\n\n*Note*:\n\nThis function is deprecated in MySQL 5.7 and is removed in MySQL 8.0.\n\nReturns a hashed password string calculated from the cleartext password\nstr. The return value is a string in the connection character set, or\nNULL if the argument is NULL. This function is the SQL interface to the\nalgorithm used by the server to encrypt MySQL passwords for storage in\nthe mysql.user grant table.\n\nThe old_passwords system variable controls the password hashing method\nused by the PASSWORD() function. It also influences password hashing\nperformed by CREATE USER and GRANT statements that specify a password\nusing an IDENTIFIED BY clause.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(261,'RANDOM_BYTES',20,'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.\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 and cannot be stored in the\nquery cache.\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/5.7/en/mysql.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(262,'SHA1',20,'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 was 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/5.7/en/encryption-functions.html\n\n','mysql> SELECT SHA1(\'abc\');\n        -> \'a9993e364706816aba3e25717850c26c9cd0d89d\'\n','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(263,'SHA2',20,'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/5.7/en/encryption-functions.html\n\n','mysql> SELECT SHA2(\'abc\', 224);\n        -> \'23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7\'\n','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(264,'UNCOMPRESS',20,'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. 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/5.7/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/5.7/en/encryption-functions.html'),(265,'UNCOMPRESSED_LENGTH',20,'Syntax:\nUNCOMPRESSED_LENGTH(compressed_string)\n\nReturns the length that the compressed string had before being\ncompressed.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT(\'a\',30)));\n        -> 30\n','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(266,'VALIDATE_PASSWORD_STRENGTH',20,'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. The return\nvalue ranges from 0 (weak) to 100 (strong).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'),(267,'GET_LOCK',21,'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\nIn MySQL 5.7, GET_LOCK() was reimplemented using the metadata locking\n(MDL) subsystem and its capabilities were extended. Multiple\nsimultaneous locks can be acquired and GET_LOCK() does not release any\nexisting locks.\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\nAs a result of the MDL reimplementation, uniquely named locks acquired\nwith GET_LOCK() appear in the Performance Schema metadata_locks table.\nThe OBJECT_TYPE column says USER LEVEL LOCK and the OBJECT_NAME column\nindicates the lock name. In the case that multiple locks are acquired\nfor the same name, only the first lock for the name registers a row in\nthe metadata_locks table. Subsequent locks for the name increment a\ncounter in the lock but do not acquire additional metadata locks. The\nmetadata_locks row for the lock is deleted when the last lock instance\non 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/5.7/en/server-error-reference.h\ntml#error_er_user_lock_deadlock) error. This error does not cause\ntransactions to roll back.\n\nBefore MySQL 5.7, only a single simultaneous lock can be acquired and\nGET_LOCK() releases any existing lock. The difference in lock\nacquisition behavior as of MySQL 5.7 can be seen by the following\nexample. Suppose that you execute these statements:\n\nSELECT GET_LOCK(\'lock1\',10);\nSELECT GET_LOCK(\'lock2\',10);\nSELECT RELEASE_LOCK(\'lock2\');\nSELECT RELEASE_LOCK(\'lock1\');\n\nIn MySQL 5.7 or later, the second GET_LOCK() acquires a second lock and\nboth RELEASE_LOCK() calls return 1 (success). Before MySQL 5.7, the\nsecond GET_LOCK() releases the first lock (\'lock1\') and the second\nRELEASE_LOCK() returns NULL (failure) because there is no \'lock1\' to\nrelease.\n\nMySQL 5.7 and later enforces a maximum length on lock names of 64\ncharacters. Previously, no limit was enforced.\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/5.7/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html'),(268,'IS_FREE_LOCK',21,'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/5.7/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html'),(269,'IS_USED_LOCK',21,'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/5.7/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html'),(270,'RELEASE_ALL_LOCKS',21,'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/5.7/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html'),(271,'RELEASE_LOCK',21,'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/5.7/en/locking-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html'),(272,'BENCHMARK',22,'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/5.7/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/5.7/en/information-functions.html'),(273,'CHARSET',22,'Syntax:\nCHARSET(str)\n\nReturns the character set of the string argument.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT CHARSET(\'abc\');\n        -> \'latin1\'\nmysql> SELECT CHARSET(CONVERT(\'abc\' USING utf8));\n        -> \'utf8\'\nmysql> SELECT CHARSET(USER());\n        -> \'utf8\'\n','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(274,'COERCIBILITY',22,'Syntax:\nCOERCIBILITY(str)\n\nReturns the collation coercibility value of the string argument.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT COERCIBILITY(\'abc\' COLLATE latin1_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/5.7/en/information-functions.html'),(275,'COLLATION',22,'Syntax:\nCOLLATION(str)\n\nReturns the collation of the string argument.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT COLLATION(\'abc\');\n        -> \'latin1_swedish_ci\'\nmysql> SELECT COLLATION(_utf8\'abc\');\n        -> \'utf8_general_ci\'\n','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(276,'CONNECTION_ID',22,'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/5.7/en/information-functions.html\n\n','mysql> SELECT CONNECTION_ID();\n        -> 23786\n','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(277,'CURRENT_USER',22,'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\nutf8 character set.\n\nThe value of CURRENT_USER() can differ from the value of USER().\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/information-functions.html'),(278,'DATABASE',22,'Syntax:\nDATABASE()\n\nReturns the default (current) database name as a string in the utf8\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/5.7/en/information-functions.html\n\n','mysql> SELECT DATABASE();\n        -> \'test\'\n','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(279,'FOUND_ROWS',22,'Syntax:\nFOUND_ROWS()\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/5.7/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/5.7/en/information-functions.html'),(280,'LAST_INSERT_ID',22,'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.\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. (However, if you mix references\nto LAST_INSERT_ID() and LAST_INSERT_ID(expr), the effect 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 following\n  them do not see a changed value.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(281,'ROW_COUNT',22,'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/5.7/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/5.7/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/5.7/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/5.7/en/information-functions.html'),(282,'SCHEMA',22,'Syntax:\nSCHEMA()\n\nThis function is a synonym for DATABASE().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(283,'SESSION_USER',22,'Syntax:\nSESSION_USER()\n\nSESSION_USER() is a synonym for USER().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(284,'SYSTEM_USER',22,'Syntax:\nSYSTEM_USER()\n\nSYSTEM_USER() is a synonym for USER().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(285,'USER',22,'Syntax:\nUSER()\n\nReturns the current MySQL user name and host name as a string in the\nutf8 character set.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT USER();\n        -> \'davida@localhost\'\n','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(286,'VERSION',22,'Syntax:\nVERSION()\n\nReturns a string that indicates the MySQL server version. The string\nuses the utf8 character set. The value might have a suffix in addition\nto the version number. See the description of the version system\nvariable in\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT VERSION();\n        -> \'5.7.35-standard\'\n','https://dev.mysql.com/doc/refman/5.7/en/information-functions.html'),(287,'GEOMCOLLFROMTEXT',24,'GeomCollFromText(wkt [, srid]), GeometryCollectionFromText(wkt [,\nsrid])\n\nST_GeomCollFromText(), ST_GeometryCollectionFromText(),\nST_GeomCollFromTxt(), GeomCollFromText(), and\nGeometryCollectionFromText() are synonyms. For more information, see\nthe description of ST_GeomCollFromText().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(288,'GEOMFROMTEXT',24,'GeomFromText(wkt [, srid]), GeometryFromText(wkt [, srid])\n\nST_GeomFromText(), ST_GeometryFromText(), GeomFromText(), and\nGeometryFromText() are synonyms. For more information, see the\ndescription of ST_GeomFromText().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(289,'LINEFROMTEXT',24,'LineFromText(wkt [, srid]), LineStringFromText(wkt [, srid])\n\nST_LineFromText(), ST_LineStringFromText(), LineFromText(), and\nLineStringFromText() are synonyms. For more information, see the\ndescription of ST_LineFromText().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(290,'MLINEFROMTEXT',24,'MLineFromText(wkt [, srid]), MultiLineStringFromText(wkt [, srid])\n\nST_MLineFromText(), ST_MultiLineStringFromText(), MLineFromText(), and\nMultiLineStringFromText() are synonyms. For more information, see the\ndescription of ST_MLineFromText().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(291,'MPOINTFROMTEXT',24,'MPointFromText(wkt [, srid]), MultiPointFromText(wkt [, srid])\n\nST_MPointFromText(), ST_MultiPointFromText(), MPointFromText(), and\nMultiPointFromText() are synonyms. For more information, see the\ndescription of ST_MPointFromText().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(292,'MPOLYFROMTEXT',24,'MPolyFromText(wkt [, srid]), MultiPolygonFromText(wkt [, srid])\n\nST_MPolyFromText(), ST_MultiPolygonFromText(), MPolyFromText(), and\nMultiPolygonFromText() are synonyms. For more information, see the\ndescription of ST_MPolyFromText().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(293,'POINTFROMTEXT',24,'PointFromText(wkt [, srid])\n\nST_PointFromText() and PointFromText() are synonyms. For more\ninformation, see the description of ST_PointFromText().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(294,'POLYFROMTEXT',24,'PolyFromText(wkt [, srid]), PolygonFromText(wkt [, srid])\n\nST_PolyFromText(), ST_PolygonFromText(), PolyFromText(), and\nPolygonFromText() are synonyms. For more information, see the\ndescription of ST_PolyFromText().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(295,'ST_GEOMCOLLFROMTEXT',24,'ST_GeomCollFromText(wkt [, srid]), ST_GeometryCollectionFromText(wkt [,\nsrid]), ST_GeomCollFromTxt(wkt [, srid])\n\nConstructs a GeometryCollection value using its WKT representation and\nSRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-wkt-functions.html'),(296,'ST_GEOMFROMTEXT',24,'ST_GeomFromText(wkt [, srid]), ST_GeometryFromText(wkt [, srid])\n\nConstructs a geometry value of any type using its WKT representation\nand SRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(297,'ST_LINEFROMTEXT',24,'ST_LineFromText(wkt [, srid]), ST_LineStringFromText(wkt [, srid])\n\nConstructs a LineString value using its WKT representation and SRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(298,'ST_MLINEFROMTEXT',24,'ST_MLineFromText(wkt [, srid]), ST_MultiLineStringFromText(wkt [,\nsrid])\n\nConstructs a MultiLineString value using its WKT representation and\nSRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(299,'ST_MPOINTFROMTEXT',24,'ST_MPointFromText(wkt [, srid]), ST_MultiPointFromText(wkt [, srid])\n\nConstructs a MultiPoint value using its WKT representation and SRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nFunctions such as ST_MPointFromText() and ST_GeomFromText() that accept\nWKT-format representations of MultiPoint values permit individual\npoints within values to be surrounded by parentheses. For example, both\nof the following function calls are valid:\n\nST_MPointFromText(\'MULTIPOINT (1 1, 2 2, 3 3)\')\nST_MPointFromText(\'MULTIPOINT ((1 1), (2 2), (3 3))\')\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(300,'ST_MPOLYFROMTEXT',24,'ST_MPolyFromText(wkt [, srid]), ST_MultiPolygonFromText(wkt [, srid])\n\nConstructs a MultiPolygon value using its WKT representation and SRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(301,'ST_POINTFROMTEXT',24,'ST_PointFromText(wkt [, srid])\n\nConstructs a Point value using its WKT representation and SRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(302,'ST_POLYFROMTEXT',24,'ST_PolyFromText(wkt [, srid]), ST_PolygonFromText(wkt [, srid])\n\nConstructs a Polygon value using its WKT representation and SRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'),(303,'GEOMCOLLFROMWKB',25,'GeomCollFromWKB(wkb [, srid]), GeometryCollectionFromWKB(wkb [, srid])\n\nST_GeomCollFromWKB(), ST_GeometryCollectionFromWKB(),\nGeomCollFromWKB(), and GeometryCollectionFromWKB() are synonyms. For\nmore information, see the description of ST_GeomCollFromWKB().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(304,'GEOMFROMWKB',25,'GeomFromWKB(wkb [, srid]), GeometryFromWKB(wkb [, srid])\n\nST_GeomFromWKB(), ST_GeometryFromWKB(), GeomFromWKB(), and\nGeometryFromWKB() are synonyms. For more information, see the\ndescription of ST_GeomFromWKB().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(305,'LINEFROMWKB',25,'LineFromWKB(wkb [, srid]), LineStringFromWKB(wkb [, srid])\n\nST_LineFromWKB(), ST_LineStringFromWKB(), LineFromWKB(), and\nLineStringFromWKB() are synonyms. For more information, see the\ndescription of ST_LineFromWKB().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(306,'MLINEFROMWKB',25,'MLineFromWKB(wkb [, srid]), MultiLineStringFromWKB(wkb [, srid])\n\nST_MLineFromWKB(), ST_MultiLineStringFromWKB(), MLineFromWKB(), and\nMultiLineStringFromWKB() are synonyms. For more information, see the\ndescription of ST_MLineFromWKB().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(307,'MPOINTFROMWKB',25,'MPointFromWKB(wkb [, srid]), MultiPointFromWKB(wkb [, srid])\n\nST_MPointFromWKB(), ST_MultiPointFromWKB(), MPointFromWKB(), and\nMultiPointFromWKB() are synonyms. For more information, see the\ndescription of ST_MPointFromWKB().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(308,'MPOLYFROMWKB',25,'MPolyFromWKB(wkb [, srid]), MultiPolygonFromWKB(wkb [, srid])\n\nST_MPolyFromWKB(), ST_MultiPolygonFromWKB(), MPolyFromWKB(), and\nMultiPolygonFromWKB() are synonyms. For more information, see the\ndescription of ST_MPolyFromWKB().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(309,'POINTFROMWKB',25,'PointFromWKB(wkb [, srid])\n\nST_PointFromWKB() and PointFromWKB() are synonyms. For more\ninformation, see the description of ST_PointFromWKB().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(310,'POLYFROMWKB',25,'PolyFromWKB(wkb [, srid]), PolygonFromWKB(wkb [, srid])\n\nST_PolyFromWKB(), ST_PolygonFromWKB(), PolyFromWKB(), and\nPolygonFromWKB() are synonyms. For more information, see the\ndescription of ST_PolyFromWKB().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(311,'ST_GEOMCOLLFROMWKB',25,'ST_GeomCollFromWKB(wkb [, srid]), ST_GeometryCollectionFromWKB(wkb [,\nsrid])\n\nConstructs a GeometryCollection value using its WKB representation and\nSRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(312,'ST_GEOMFROMWKB',25,'ST_GeomFromWKB(wkb [, srid]), ST_GeometryFromWKB(wkb [, srid])\n\nConstructs a geometry value of any type using its WKB representation\nand SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(313,'ST_LINEFROMWKB',25,'ST_LineFromWKB(wkb [, srid]), ST_LineStringFromWKB(wkb [, srid])\n\nConstructs a LineString value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(314,'ST_MLINEFROMWKB',25,'ST_MLineFromWKB(wkb [, srid]), ST_MultiLineStringFromWKB(wkb [, srid])\n\nConstructs a MultiLineString value using its WKB representation and\nSRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(315,'ST_MPOINTFROMWKB',25,'ST_MPointFromWKB(wkb [, srid]), ST_MultiPointFromWKB(wkb [, srid])\n\nConstructs a MultiPoint value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(316,'ST_MPOLYFROMWKB',25,'ST_MPolyFromWKB(wkb [, srid]), ST_MultiPolygonFromWKB(wkb [, srid])\n\nConstructs a MultiPolygon value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(317,'ST_POINTFROMWKB',25,'ST_PointFromWKB(wkb [, srid])\n\nConstructs a Point value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(318,'ST_POLYFROMWKB',25,'ST_PolyFromWKB(wkb [, srid]), ST_PolygonFromWKB(wkb [, srid])\n\nConstructs a Polygon value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'),(319,'GEOMETRYCOLLECTION',26,'GeometryCollection(g [, g] ...)\n\nConstructs a GeometryCollection 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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'),(320,'LINESTRING',26,'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/5.7/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'),(321,'MULTILINESTRING',26,'MultiLineString(ls [, ls] ...)\n\nConstructs a MultiLineString value using LineString or WKB LineString\narguments.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'),(322,'MULTIPOINT',26,'MultiPoint(pt [, pt2] ...)\n\nConstructs a MultiPoint value using Point or WKB Point arguments.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'),(323,'MULTIPOLYGON',26,'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/5.7/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'),(324,'POINT',26,'Point(x, y)\n\nConstructs a Point using its coordinates.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'),(325,'POLYGON',26,'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/5.7/en/gis-mysql-specific-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'),(326,'ASBINARY',25,'AsBinary(g), AsWKB(g)\n\nST_AsBinary(), ST_AsWKB(), AsBinary(), and AsWKB() are synonyms. For\nmore information, see the description of ST_AsBinary().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html'),(327,'ASTEXT',25,'AsText(g), AsWKT(g)\n\nST_AsText(), ST_AsWKT(), AsText(), and AsWKT() are synonyms. For more\ninformation, see the description of ST_AsText().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html'),(328,'ST_ASBINARY',25,'ST_AsBinary(g), ST_AsWKB(g)\n\nConverts a value in internal geometry format to its WKB representation\nand returns the binary result.\n\nIf the argument is NULL, the return value is NULL. If the argument is\nnot a syntactically well-formed geometry, an ER_GIS_INVALID_DATA\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_gis_invalid_data) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html\n\n','SELECT ST_AsBinary(g) FROM geom;\n','https://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html'),(329,'ST_ASTEXT',25,'ST_AsText(g), ST_AsWKT(g)\n\nConverts a value in internal geometry format to its WKT representation\nand returns the string result.\n\nIf the argument is NULL, the return value is NULL. If the argument is\nnot a syntactically well-formed geometry, an ER_GIS_INVALID_DATA\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_gis_invalid_data) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-format-conversion-functions.html'),(330,'DIMENSION',27,'Dimension(g)\n\nST_Dimension() and Dimension() are synonyms. For more information, see\nthe description of ST_Dimension().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(331,'ENVELOPE',27,'Envelope(g)\n\nST_Envelope() and Envelope() are synonyms. For more information, see\nthe description of ST_Envelope().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(332,'GEOMETRYTYPE',27,'GeometryType(g)\n\nST_GeometryType() and GeometryType() are synonyms. For more\ninformation, see the description of ST_GeometryType().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(333,'ISEMPTY',27,'IsEmpty(g)\n\nST_IsEmpty() and IsEmpty() are synonyms. For more information, see the\ndescription of ST_IsEmpty().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(334,'ISSIMPLE',27,'IsSimple(g)\n\nST_IsSimple() and IsSimple() are synonyms. For more information, see\nthe description of ST_IsSimple().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(335,'SRID',27,'SRID(g)\n\nST_SRID() and SRID() are synonyms. For more information, see the\ndescription of ST_SRID().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(336,'ST_DIMENSION',27,'ST_Dimension(g)\n\nReturns the inherent dimension of the geometry value g, or NULL if the\nargument is NULL. The dimension can be −1, 0, 1, or 2. The meaning of\nthese values is given in\nhttps://dev.mysql.com/doc/refman/5.7/en/gis-class-geometry.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-general-property-functions.html'),(337,'ST_ENVELOPE',27,'ST_Envelope(g)\n\nReturns the minimum bounding rectangle (MBR) for the geometry value g,\nor NULL if the argument is NULL. The result is returned as a Polygon\nvalue that is defined by the corner points 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\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(338,'ST_GEOMETRYTYPE',27,'ST_GeometryType(g)\n\nReturns a binary string indicating the name of the geometry type of\nwhich the geometry instance g is a member, or NULL if the argument is\nNULL. The name corresponds to one of the instantiable Geometry\nsubclasses.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-general-property-functions.html'),(339,'ST_ISEMPTY',27,'ST_IsEmpty(g)\n\nThis function is a placeholder that returns 0 for any valid geometry\nvalue, 1 for any invalid geometry value, or NULL if the argument is\nNULL.\n\nMySQL does not support GIS EMPTY values such as POINT EMPTY.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(340,'ST_ISSIMPLE',27,'ST_IsSimple(g)\n\nReturns 1 if the geometry value g has no anomalous geometric points,\nsuch as self-intersection or self-tangency. ST_IsSimple() returns 0 if\nthe argument is not simple, and NULL if the argument is NULL.\n\nThe descriptions of the instantiable geometric classes given under\nhttps://dev.mysql.com/doc/refman/5.7/en/opengis-geometry-model.html\nincludes the specific conditions that cause class instances to be\nclassified as not simple.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(341,'ST_SRID',27,'ST_SRID(g)\n\nReturns an integer indicating the spatial reference system ID\nassociated with the geometry value g, or NULL if the argument is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_SRID(ST_GeomFromText(\'LineString(1 1,2 2)\',101));\n+-----------------------------------------------------+\n| ST_SRID(ST_GeomFromText(\'LineString(1 1,2 2)\',101)) |\n+-----------------------------------------------------+\n|                                                 101 |\n+-----------------------------------------------------+\n','https://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'),(342,'ST_X',28,'ST_X(p)\n\nReturns the X-coordinate value for the Point object p as a\ndouble-precision number.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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+--------------------------+\n','https://dev.mysql.com/doc/refman/5.7/en/gis-point-property-functions.html'),(343,'ST_Y',28,'ST_Y(p)\n\nReturns the Y-coordinate value for the Point object p as a\ndouble-precision number.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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+--------------------------+\n','https://dev.mysql.com/doc/refman/5.7/en/gis-point-property-functions.html'),(344,'X',28,'X(p)\n\nST_X() and X() are synonyms. For more information, see the description\nof ST_X().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-point-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-point-property-functions.html'),(345,'Y',28,'Y(p)\n\nST_Y() and Y() are synonyms. For more information, see the description\nof ST_Y().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-point-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-point-property-functions.html'),(346,'ENDPOINT',29,'EndPoint(ls)\n\nST_EndPoint() and EndPoint() are synonyms. For more information, see\nthe description of ST_EndPoint().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'),(347,'GLENGTH',29,'GLength(ls)\n\nGLength() is a nonstandard name. It corresponds to the OpenGIS\nST_Length() function. (There is an existing SQL function Length() that\ncalculates the length of string values.)\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'),(348,'ISCLOSED',29,'IsClosed(ls)\n\nST_IsClosed() and IsClosed() are synonyms. For more information, see\nthe description of ST_IsClosed().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'),(349,'NUMPOINTS',29,'NumPoints(ls)\n\nST_NumPoints() and NumPoints() are synonyms. For more information, see\nthe description of ST_NumPoints().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'),(350,'POINTN',29,'PointN(ls, N)\n\nST_PointN() and PointN() are synonyms. For more information, see the\ndescription of ST_PointN().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'),(351,'ST_ENDPOINT',29,'ST_EndPoint(ls)\n\nReturns the Point that is the endpoint of the LineString value ls. If\nthe argument is NULL or an empty geometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-linestring-property-functions.html'),(352,'ST_ISCLOSED',29,'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).\nIf the argument is NULL or an empty geometry, the return value is NULL.\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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-linestring-property-functions.html'),(353,'ST_LENGTH',29,'ST_Length(ls)\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. If the argument is NULL or an empty\ngeometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_Length(ST_GeomFromText(@ls));\n+---------------------------------+\n| ST_Length(ST_GeomFromText(@ls)) |\n+---------------------------------+\n|              2.8284271247461903 |\n+---------------------------------+\n\nmysql> SET @mls = \'MultiLineString((1 1,2 2,3 3),(4 4,5 5))\';\nmysql> SELECT ST_Length(ST_GeomFromText(@mls));\n+----------------------------------+\n| ST_Length(ST_GeomFromText(@mls)) |\n+----------------------------------+\n|                4.242640687119286 |\n+----------------------------------+\n','https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'),(354,'ST_NUMPOINTS',29,'ST_NumPoints(ls)\n\nReturns the number of Point objects in the LineString value ls. If the\nargument is NULL or an empty geometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-linestring-property-functions.html'),(355,'ST_POINTN',29,'ST_PointN(ls, N)\n\nReturns the N-th Point in the Linestring value ls. Points are numbered\nbeginning with 1. If any argument is NULL or the geometry argument is\nan empty geometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-linestring-property-functions.html'),(356,'ST_STARTPOINT',29,'ST_StartPoint(ls)\n\nReturns the Point that is the start point of the LineString value ls.\nIf the argument is NULL or an empty geometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-linestring-property-functions.html'),(357,'STARTPOINT',29,'StartPoint(ls)\n\nST_StartPoint() and StartPoint() are synonyms. For more information,\nsee the description of ST_StartPoint().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'),(358,'AREA',30,'Area({poly|mpoly})\n\nST_Area() and Area() are synonyms. For more information, see the\ndescription of ST_Area().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'),(359,'CENTROID',30,'Centroid({poly|mpoly})\n\nST_Centroid() and Centroid() are synonyms. For more information, see\nthe description of ST_Centroid().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'),(360,'EXTERIORRING',30,'ExteriorRing(poly)\n\nST_ExteriorRing() and ExteriorRing() are synonyms. For more\ninformation, see the description of ST_ExteriorRing().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'),(361,'INTERIORRINGN',30,'InteriorRingN(poly, N)\n\nST_InteriorRingN() and InteriorRingN() are synonyms. For more\ninformation, see the description of ST_InteriorRingN().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'),(362,'NUMINTERIORRINGS',30,'NumInteriorRings(poly)\n\nST_NumInteriorRings() and NumInteriorRings() are synonyms. For more\ninformation, see the description of ST_NumInteriorRings().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'),(363,'ST_AREA',30,'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. For\narguments of dimension 0 or 1, the result is 0. If the argument is an\nempty geometry the return value is 0. If the argument is NULL the\nreturn value is NULL.\n\nThe result is the sum of the area values of all components for a\ngeometry collection. If a geometry collection is empty, its area is\nreturned as 0.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-polygon-property-functions.html'),(364,'ST_CENTROID',30,'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. If the argument is NULL or an empty geometry, the return\nvalue is NULL.\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. If the\nargument is an empty geometry collection, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-polygon-property-functions.html'),(365,'ST_EXTERIORRING',30,'ST_ExteriorRing(poly)\n\nReturns the exterior ring of the Polygon value poly as a LineString. If\nthe argument is NULL or an empty geometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-polygon-property-functions.html'),(366,'ST_INTERIORRINGN',30,'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. If the argument is\nNULL or an empty geometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-polygon-property-functions.html'),(367,'ST_NUMINTERIORRINGS',30,'ST_NumInteriorRing(poly), ST_NumInteriorRings(poly)\n\nReturns the number of interior rings in the Polygon value poly. If the\nargument is NULL or an empty geometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-polygon-property-functions.html'),(368,'GEOMETRYN',31,'GeometryN(gc, N)\n\nST_GeometryN() and GeometryN() are synonyms. For more information, see\nthe description of ST_GeometryN().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html'),(369,'NUMGEOMETRIES',31,'NumGeometries(gc)\n\nST_NumGeometries() and NumGeometries() are synonyms. For more\ninformation, see the description of ST_NumGeometries().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html'),(370,'ST_GEOMETRYN',31,'ST_GeometryN(gc, N)\n\nReturns the N-th geometry in the GeometryCollection value gc.\nGeometries are numbered beginning with 1. If any argument is NULL or\nthe geometry argument is an empty geometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-geometrycollection-property-functions.html'),(371,'ST_NUMGEOMETRIES',31,'ST_NumGeometries(gc)\n\nReturns the number of geometries in the GeometryCollection value gc. If\nthe argument is NULL or an empty geometry, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gis-geometrycollection-property-functions.html'),(372,'BUFFER',31,'Buffer(g, d [, strategy1 [, strategy2 [, strategy3]]])\n\nST_Buffer() and Buffer() are synonyms. For more information, see the\ndescription of ST_Buffer().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html'),(373,'CONVEXHULL',31,'ConvexHull(g)\n\nST_ConvexHull() and ConvexHull() are synonyms. For more information,\nsee the description of ST_ConvexHull().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html'),(374,'ST_BUFFER',31,'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, or NULL if\nany argument is NULL. The SRID of the geometry argument must be 0\nbecause ST_Buffer() supports only the Cartesian coordinate system. If\nany geometry argument is not a syntactically well-formed geometry, an\nER_GIS_INVALID_DATA\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_gis_invalid_data) error occurs.\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\nST_Buffer() supports negative distances for Polygon and MultiPolygon\nvalues, and for geometry collections containing Polygon or MultiPolygon\nvalues. The result may be an empty geometry. An ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_wrong_arguments) error occurs for ST_Buffer() with a\nnegative distance for Point, MultiPoint, LineString, and\nMultiLineString values, and for geometry collections not containing any\nPolygon or MultiPolygon values.\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. If multiple strategies of a given type are specified, an\nER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_wrong_arguments) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-operator-functions.html'),(375,'ST_BUFFER_STRATEGY',31,'ST_Buffer_Strategy(strategy [, points_per_circle])\n\nThis function returns a strategy byte string for use with ST_Buffer()\nto influence buffer computation. If any argument is NULL, the return\nvalue is NULL. If any argument is invalid, an ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_wrong_arguments) error occurs.\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. If the first argument is\n\'point_square\' or \'end_flat\', the points_per_circle argument must not\nbe given or an ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_wrong_arguments) error occurs.\n\nFor examples, see the description of ST_Buffer().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html'),(376,'ST_CONVEXHULL',31,'ST_ConvexHull(g)\n\nReturns a geometry that represents the convex hull of the geometry\nvalue g. If the argument is NULL, the return value is NULL.\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. If the argument is an empty geometry collection, the\nreturn value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-operator-functions.html'),(377,'ST_DIFFERENCE',31,'ST_Difference(g1, g2)\n\nReturns a geometry that represents the point set difference of the\ngeometry values g1 and g2. If any argument is NULL, the return value is\nNULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-operator-functions.html'),(378,'ST_INTERSECTION',31,'ST_Intersection(g1, g2)\n\nReturns a geometry that represents the point set intersection of the\ngeometry values g1 and g2. If any argument is NULL, the return value is\nNULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-operator-functions.html'),(379,'ST_SYMDIFFERENCE',31,'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\nIf any argument is NULL, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-operator-functions.html'),(380,'ST_UNION',31,'ST_Union(g1, g2)\n\nReturns a geometry that represents the point set union of the geometry\nvalues g1 and g2. If any argument is NULL, the return value is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-operator-functions.html'),(381,'CROSSES',32,'Crosses(g1, g2)\n\nST_Crosses() and Crosses() are synonyms. For more information, see the\ndescription of ST_Crosses().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(382,'DISTANCE',32,'Distance(g1, g2)\n\nST_Distance() and Distance() are synonyms. For more information, see\nthe description of ST_Distance().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(383,'ST_CONTAINS',32,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(384,'ST_CROSSES',32,'ST_Crosses(g1, g2)\n\nThe term spatially crosses denotes a spatial relation between two given\ngeometries that has the following properties:\n\no The two geometries intersect.\n\no Their intersection results in a geometry that has a dimension that is\n  one less than the maximum dimension of the two given geometries.\n\no Their intersection is not equal to either of the two given\n  geometries.\n\nThis function returns 1 or 0 to indicate whether g1 spatially crosses\ng2. If g1 is a Polygon or a MultiPolygon, or if g2 is a Point or a\nMultiPoint, the return value is NULL.\n\nThis function returns 0 if called with an inapplicable geometry\nargument type combination. For example, it returns 0 if the first\nargument is a Polygon or MultiPolygon and/or the second argument is a\nPoint or MultiPoint.\n\nReturns 1 if g1 spatially crosses g2. Returns NULL if g1 is a Polygon\nor a MultiPolygon, or if g2 is a Point or a MultiPoint. Otherwise,\nreturns 0.\n\nThis function returns 0 if called with an inapplicable geometry\nargument type combination. For example, it returns 0 if the first\nargument is a Polygon or MultiPolygon and/or the second argument is a\nPoint or MultiPoint.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(385,'ST_DISJOINT',32,'ST_Disjoint(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 is spatially disjoint from (does\nnot intersect) g2.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(386,'ST_DISTANCE',32,'ST_Distance(g1, g2)\n\nReturns the distance between g1 and g2. If either argument is NULL or\nan empty geometry, the return value is NULL.\n\nThis function processes geometry collections by returning the shortest\ndistance among all combinations of the components of the two geometry\narguments.\n\nIf an intermediate or final result produces NaN or a negative number,\nan ER_GIS_INVALID_DATA\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_gis_invalid_data) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','mysql> SET @g1 = Point(1,1);\nmysql> SET @g2 = Point(2,2);\nmysql> SELECT ST_Distance(@g1, @g2);\n+-----------------------+\n| ST_Distance(@g1, @g2) |\n+-----------------------+\n|    1.4142135623730951 |\n+-----------------------+\n','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(387,'ST_EQUALS',32,'ST_Equals(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 is spatially equal to g2.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-relation-functions-object-shapes.html'),(388,'ST_INTERSECTS',32,'ST_Intersects(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 spatially intersects g2.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(389,'ST_OVERLAPS',32,'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\nThis function returns 0 if called with an inapplicable geometry\nargument type combination. For example, it returns 0 if called with\ngeometries of different dimensions or any argument is a Point.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(390,'ST_TOUCHES',32,'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\nThis function returns 0 if called with an inapplicable geometry\nargument type combination. For example, it returns 0 if either of the\narguments is a Point or MultiPoint.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(391,'ST_WITHIN',32,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(392,'TOUCHES',32,'Touches(g1, g2)\n\nST_Touches() and Touches() are synonyms. For more information, see the\ndescription of ST_Touches().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'),(393,'MBRCONTAINS',33,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-relation-functions-mbr.html'),(394,'MBRCOVEREDBY',33,'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 follows:\n\no If either argument is NULL or an empty geometry, the return value is\n  NULL.\n\no If either argument is not a syntactically well-formed geometry byte\n  string, an ER_GIS_INVALID_DATA\n  (https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference\n  .html#error_er_gis_invalid_data) error occurs.\n\no Otherwise, the return value is non-NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-relation-functions-mbr.html'),(395,'MBRCOVERS',33,'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 follows:\n\no If either argument is NULL or an empty geometry, the return value is\n  NULL.\n\no If either argument is not a syntactically well-formed geometry byte\n  string, an ER_GIS_INVALID_DATA\n  (https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference\n  .html#error_er_gis_invalid_data) error occurs.\n\no Otherwise, the return value is non-NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(396,'MBRDISJOINT',33,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(397,'MBREQUAL',33,'MBREqual(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\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(398,'MBREQUALS',33,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(399,'MBRINTERSECTS',33,'MBRIntersects(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangles of\nthe two geometries g1 and g2 intersect.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(400,'MBROVERLAPS',33,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(401,'MBRTOUCHES',33,'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\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(402,'MBRWITHIN',33,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-relation-functions-mbr.html'),(403,'CONTAINS',33,'Contains(g1, g2)\n\nMBRContains() and Contains() are synonyms. For more information, see\nthe description of MBRContains().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(404,'DISJOINT',33,'Disjoint(g1, g2)\n\nMBRDisjoint() and Disjoint() are synonyms. For more information, see\nthe description of MBRDisjoint().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(405,'EQUALS',33,'Equals(g1, g2)\n\nMBREquals() and Equals() are synonyms. For more information, see the\ndescription of MBREquals().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(406,'INTERSECTS',33,'Intersects(g1, g2)\n\nMBRIntersects() and Intersects() are synonyms. For more information,\nsee the description of MBRIntersects().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(407,'OVERLAPS',33,'Overlaps(g1, g2)\n\nMBROverlaps() and Overlaps() are synonyms. For more information, see\nthe description of MBROverlaps().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(408,'WITHIN',33,'Within(g1, g2)\n\nMBRWithin() and Within() are synonyms. For more information, see the\ndescription of MBRWithin().\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'),(409,'ST_GEOHASH',33,'ST_GeoHash(longitude, latitude, max_length), ST_GeoHash(point,\nmax_length)\n\nReturns a geohash string in the connection character set and collation.\n\nIf any argument is NULL, the return value is NULL. If any argument is\ninvalid, an error occurs.\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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-geohash-functions.html'),(410,'ST_LATFROMGEOHASH',33,'ST_LatFromGeoHash(geohash_str)\n\nReturns the latitude from a geohash string value, as a DOUBLE value in\nthe range [−90, 90].\n\nIf the argument is NULL, the return value is NULL. If the argument is\ninvalid, an error occurs.\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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-geohash-functions.html'),(411,'ST_LONGFROMGEOHASH',33,'ST_LongFromGeoHash(geohash_str)\n\nReturns the longitude from a geohash string value, as a DOUBLE value in\nthe range [−180, 180].\n\nIf the argument is NULL, the return value is NULL. If the argument is\ninvalid, an error occurs.\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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-geohash-functions.html'),(412,'ST_POINTFROMGEOHASH',33,'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\nIf any argument is NULL, the return value is NULL. If any argument is\ninvalid, an error occurs.\n\nThe srid argument is an unsigned 32-bit 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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-geohash-functions.html'),(413,'ST_ASGEOJSON',33,'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/5.7/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/5.7/en/spatial-geojson-functions.html'),(414,'ST_GEOMFROMGEOJSON',33,'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/5.7/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(102 0)                         |\n+--------------------------------------+\n','https://dev.mysql.com/doc/refman/5.7/en/spatial-geojson-functions.html'),(415,'ST_DISTANCE_SPHERE',33,'ST_Distance_Sphere(g1, g2 [, radius])\n\nReturns the mimimum spherical distance between two points and/or\nmultipoints on a sphere, in meters, or NULL if any geometry argument is\nNULL or empty.\n\nCalculations use a spherical earth and a configurable radius. The\noptional radius argument should be given in meters. If omitted, the\ndefault radius is 6,370,986 meters. An ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_wrong_arguments) error occurs if the radius argument is\npresent but not positive.\n\nThe geometry arguments should consist of points that specify\n(longitude, latitude) coordinate values:\n\no Longitude and latitude are the first and second coordinates of the\n  point, respectively.\n\no Both coordinates are in degrees.\n\no Longitude values must be in the range (-180, 180]. Positive values\n  are east of the prime meridian.\n\no Latitude values must be in the range [-90, 90]. Positive values are\n  north of the equator.\n\nSupported argument combinations are (Point, Point), (Point,\nMultiPoint), and (MultiPoint, Point). An ER_GIS_UNSUPPORTED_ARGUMENT\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_gis_unsupported_argument) error occurs for other\ncombinations.\n\nIf any geometry argument is not a syntactically well-formed geometry\nbyte string, an ER_GIS_INVALID_DATA\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_gis_invalid_data) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-convenience-functions.html'),(416,'ST_ISVALID',33,'ST_IsValid(g)\n\nReturns 1 if the argument is syntactically well-formed and is\ngeometrically valid, 0 if the argument is not syntactically well-formed\nor is not geometrically valid. If the argument is NULL, the return\nvalue is NULL. Geometry validity is defined by the OGC specification.\n\nThe only valid empty geometry is represented in the form of an empty\ngeometry collection value. ST_IsValid() returns 1 in this case.\n\nST_IsValid() works only for the Cartesian coordinate system and\nrequires a geometry argument with an SRID of 0. An ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_wrong_arguments) error occurs otherwise.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-convenience-functions.html'),(417,'ST_MAKEENVELOPE',33,'ST_MakeEnvelope(pt1, pt2)\n\nReturns the rectangle that forms the envelope around two points, as a\nPoint, LineString, or Polygon. If any argument is NULL, the return\nvalue is NULL.\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() requires Point geometry arguments with an SRID of 0.\nAn ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_wrong_arguments) error occurs otherwise.\n\nIf any argument is not a syntactically well-formed geometry byte\nstring, or if any coordinate value of the two points is infinite or\nNaN, an ER_GIS_INVALID_DATA\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_gis_invalid_data) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-convenience-functions.html'),(418,'ST_SIMPLIFY',33,'ST_Simplify(g, max_distance)\n\nSimplifies a geometry using the Douglas-Peucker algorithm and returns a\nsimplified value of the same type. If any argument is NULL, the return\nvalue is NULL.\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. If the\nmax_distance argument is not positive, or is NaN, an ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_wrong_arguments) error occurs.\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\nIf the geometry argument is not a syntactically well-formed geometry\nbyte string, an ER_GIS_INVALID_DATA\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_gis_invalid_data) error occurs.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-convenience-functions.html'),(419,'ST_VALIDATE',33,'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\nST_Validate() works only for the Cartesian coordinate system and\nrequires a geometry argument with an SRID of 0. An ER_WRONG_ARGUMENTS\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_wrong_arguments) error occurs otherwise.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/spatial-convenience-functions.html'),(420,'JSON_ARRAY',33,'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/5.7/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/5.7/en/json-creation-functions.html'),(421,'JSON_OBJECT',33,'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/5.7/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/5.7/en/json-creation-functions.html'),(422,'JSON_QUOTE',33,'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/5.7/en/json-modification-functions.htm\nl#json-unquote-character-escape-sequences.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/json-creation-functions.html'),(423,'JSON_CONTAINS',33,'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\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/json-search-functions.html'),(424,'JSON_CONTAINS_PATH',33,'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/5.7/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/5.7/en/json-search-functions.html'),(425,'JSON_EXTRACT',33,'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/5.7/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/5.7/en/json-search-functions.html'),(426,'->',33,'Syntax:\ncolumn->path\n\nIn MySQL 5.7.9 and later, the -> operator serves as an alias for the\nJSON_EXTRACT() function when used with two arguments, a column\nidentifier on the left and a JSON path (a string literal) on the right\nthat is evaluated against the JSON document (the column value). You can\nuse such expressions in place of column references wherever they occur\nin SQL statements.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/json-search-functions.html'),(427,'->>',33,'Syntax:\ncolumn->>path\n\nThis is an improved, unquoting extraction operator available in MySQL\n5.7.13 and later. Whereas the -> operator simply extracts a value, the\n->> operator in addition unquotes the extracted result. In other words,\ngiven a JSON column value column and a path expression path (a string\nliteral), the following three expressions 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/5.7/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/5.7/en/json-search-functions.html'),(428,'JSON_KEYS',33,'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/5.7/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/5.7/en/json-search-functions.html'),(429,'JSON_SEARCH',33,'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/5.7/en/string-comparison-functions.htm\nl. 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 interpeted as utf8mb4 strings,\nregardless of their actual encoding. This is a known issue which is\nfixed in MySQL 8.0 ( Bug #32449181).\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/json-search-functions.html'),(430,'JSON_APPEND',33,'Syntax:\nJSON_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. This function was renamed to\nJSON_ARRAY_APPEND() in MySQL 5.7.9; the alias JSON_APPEND() is now\ndeprecated in MySQL 5.7, and is removed in MySQL 8.0.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html'),(431,'JSON_ARRAY_APPEND',33,'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/5.7/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/5.7/en/json-modification-functions.html'),(432,'JSON_ARRAY_INSERT',33,'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/5.7/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/5.7/en/json-modification-functions.html'),(433,'JSON_INSERT',33,'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/5.7/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/5.7/en/json-modification-functions.html'),(434,'JSON_MERGE',33,'Syntax:\nJSON_MERGE(json_doc, json_doc[, json_doc] ...)\n\nMerges two or more JSON documents. Synonym for JSON_MERGE_PRESERVE();\ndeprecated in MySQL 5.7.22 and subject to removal in a future release.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/json-modification-functions.html'),(435,'JSON_MERGE_PATCH()',33,'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/5.7/en/json-modification-functions.htm\nl#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/5.7/en/json.html#json-normalization.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/json-modification-functions.html'),(436,'JSON_MERGE_PRESERVE()',33,'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/5.7/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/5.7/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/5.7/en/json-modification-functions.html'),(437,'JSON_REMOVE',33,'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/5.7/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/5.7/en/json-modification-functions.html'),(438,'JSON_REPLACE',33,'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\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/5.7/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/5.7/en/json-modification-functions.html'),(439,'JSON_SET',33,'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 any argument is NULL or path, if given, does not locate\nan object. 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.\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\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/5.7/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/5.7/en/json-modification-functions.html'),(440,'JSON_UNQUOTE',33,'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/5.7/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/5.7/en/json-modification-functions.html'),(441,'JSON_DEPTH',33,'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/5.7/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/5.7/en/json-attribute-functions.html'),(442,'JSON_LENGTH',33,'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 or 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/5.7/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/5.7/en/json-attribute-functions.html'),(443,'JSON_TYPE',33,'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 utf8 character type scalars: CHAR, VARCHAR, TEXT,\n    ENUM, and SET\n\no Binary types:\n\n  o BLOB: MySQL binary type scalars: BINARY, VARBINARY, BLOB\n\n  o BIT: MySQL BIT scalars\n\no All other types:\n\n  o OPAQUE (raw bits)\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html'),(444,'JSON_VALID',33,'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/5.7/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/5.7/en/json-attribute-functions.html'),(445,'JSON_PRETTY',33,'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/5.7/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/5.7/en/json-utility-functions.html'),(446,'JSON_STORAGE_SIZE',33,'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. json_val must be a\nvalid JSON document or a string which can be parsed as one. In the case\nwhere it is string, the function returns the amount of storage space in\nthe JSON binary representation that is created by parsing the string as\nJSON and converting it to binary. It returns NULL if the argument is\nNULL.\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/5.7/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    -> FROM jtable;\n+-----------------------------------------------+------+\n| jcol                                          | Size |\n+-----------------------------------------------+------+\n| {\"a\": 1000, \"b\": \"wxyz\", \"c\": \"[1, 3, 5, 7]\"} |   47 |\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    -> FROM jtable;\n+------------------------------------------------+------+\n| jcol                                           | Size |\n+------------------------------------------------+------+\n| {\"a\": 4.55, \"b\": \"wxyz\", \"c\": \"[true, false]\"} |   56 |\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/5.7/en/json-utility-functions.html'),(447,'GTID_SUBSET',34,'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 false otherwise.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gtid-functions.html'),(448,'GTID_SUBTRACT',34,'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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gtid-functions.html'),(449,'WAIT_FOR_EXECUTED_GTID_SET',34,'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/5.7/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.\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/5.7/en/replication-gtids.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/gtid-functions.html'),(450,'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS',34,'Syntax:\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(gtid_set[, timeout][,channel])\n\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() is similar to\nWAIT_FOR_EXECUTED_GTID_SET() in that it waits until all of the\ntransactions whose global transaction identifiers are contained in\ngtid_set have been applied, or until timeout seconds have elapsed,\nwhichever occurs first. However, WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()\napplies to a specific replication channel, and stops only after the\ntransactions have been applied on the specified channel, for which the\napplier must be running. In contrast, WAIT_FOR_EXECUTED_GTID_SET()\nstops after the transactions have been applied, regardless of where\nthey were applied (on any replication channel or any user client), and\nwhether or not any replication channels are running.\n\nThe channel option names which replication channel the function applies\nto. If no channel is named and no channels other than the default\nreplication channel exist, the function applies to the default\nreplication channel. If multiple replication channels exist, you must\nspecify a channel as otherwise it is not known which replication\nchannel the function applies to. See\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information on replication channels.\n\n*Note*:\n\nBecause WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() applies to a specific\nreplication channel, if an expected transaction arrives on a different\nreplication channel or from a user client, for example in a failover or\nmanual recovery situation, the function can hang indefinitely if no\ntimeout is set. Use WAIT_FOR_EXECUTED_GTID_SET() instead to ensure\ncorrect handling of transactions in these situations.\n\nGTID sets used with WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() are represented\nas strings and must be quoted in the same way as for\nWAIT_FOR_EXECUTED_GTID_SET(). For WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(),\nthe return value for the function is an arbitrary positive number. If\nGTID-based replication is not active (that is, if the value of the\ngtid_mode variable is OFF), then this value is undefined and\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() returns NULL. If the replica is not\nrunning then the function also returns NULL.\n\ngtid_mode cannot be changed to OFF while any client is using this\nfunction to wait for GTIDs to be applied.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html'),(451,'AVG',35,'Syntax:\nAVG([DISTINCT] expr)\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.\n\nURL: https://dev.mysql.com/doc/refman/5.7/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/5.7/en/aggregate-functions.html'),(452,'BIT_AND',35,'Syntax:\nBIT_AND(expr)\n\nReturns the bitwise AND of all bits in expr. The calculation is\nperformed with 64-bit (BIGINT) precision.\n\nIf there are no matching rows, BIT_AND() returns a neutral value (all\nbits set to 1).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(453,'BIT_OR',35,'Syntax:\nBIT_OR(expr)\n\nReturns the bitwise OR of all bits in expr. The calculation is\nperformed with 64-bit (BIGINT) precision.\n\nIf there are no matching rows, BIT_OR() returns a neutral value (all\nbits set to 0).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(454,'BIT_XOR',35,'Syntax:\nBIT_XOR(expr)\n\nReturns the bitwise XOR of all bits in expr. The calculation is\nperformed with 64-bit (BIGINT) precision.\n\nIf there are no matching rows, BIT_XOR() returns a neutral value (all\nbits set to 0).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(455,'COUNT',35,'Syntax:\nCOUNT(expr)\n\nReturns a count of the number of non-NULL values of expr in the rows\nretrieved by a SELECT statement. The result is a BIGINT value.\n\nIf there are no matching rows, COUNT() returns 0.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','mysql> SELECT student.student_name,COUNT(*)\n       FROM student,course\n       WHERE student.student_id=course.student_id\n       GROUP BY student_name;\n','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(456,'COUNT DISTINCT',35,'Syntax:\nCOUNT(DISTINCT expr,[expr...])\n\nReturns a count of the number of rows with different non-NULL expr\nvalues.\n\nIf there are no matching rows, COUNT(DISTINCT) returns 0.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','mysql> SELECT COUNT(DISTINCT results) FROM student;\n','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(457,'GROUP_CONCAT',35,'Syntax:\nGROUP_CONCAT(expr)\n\nThis function returns a string result with the concatenated non-NULL\nvalues from a group. It returns NULL if there are no non-NULL values.\nThe full syntax is as follows:\n\nGROUP_CONCAT([DISTINCT] expr [,expr ...]\n             [ORDER BY {unsigned_integer | col_name | expr}\n                 [ASC | DESC] [,col_name ...]]\n             [SEPARATOR str_val])\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','mysql> SELECT student_name,\n         GROUP_CONCAT(test_score)\n       FROM student\n       GROUP BY student_name;\n','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(458,'JSON_ARRAYAGG',35,'Syntax:\nJSON_ARRAYAGG(col_or_expr)\n\nAggregates a result set as a single JSON array whose elements consist\nof the rows. The order of elements in this array is undefined. The\nfunction acts on a column or an expression that evaluates to a single\nvalue. Returns NULL if the result contains no rows, or in the event of\nan error.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','mysql> SELECT o_id, attribute, value FROM t3;\n+------+-----------+-------+\n| o_id | attribute | value |\n+------+-----------+-------+\n|    2 | color     | red   |\n|    2 | fabric    | silk  |\n|    3 | color     | green |\n|    3 | shape     | square|\n+------+-----------+-------+\n4 rows in set (0.00 sec)\n\nmysql> SELECT o_id, JSON_ARRAYAGG(attribute) AS attributes\n     > FROM t3 GROUP BY o_id;\n+------+---------------------+\n| o_id | attributes          |\n+------+---------------------+\n|    2 | [\"color\", \"fabric\"] |\n|    3 | [\"color\", \"shape\"]  |\n+------+---------------------+\n2 rows in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(459,'JSON_OBJECTAGG',35,'Syntax:\nJSON_OBJECTAGG(key, value)\n\nTakes two column names or expressions as arguments, the first of these\nbeing used as a key and the second as a value, and returns a JSON\nobject containing key-value pairs. Returns NULL if the result contains\nno rows, or in the event of an error. An error occurs if any key name\nis NULL or the number of arguments is not equal to 2.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','mysql> SELECT o_id, attribute, value FROM t3;\n+------+-----------+-------+\n| o_id | attribute | value |\n+------+-----------+-------+\n|    2 | color     | red   |\n|    2 | fabric    | silk  |\n|    3 | color     | green |\n|    3 | shape     | square|\n+------+-----------+-------+\n4 rows in set (0.00 sec)\n\nmysql> SELECT o_id, JSON_OBJECTAGG(attribute, value)\n     > FROM t3 GROUP BY o_id;\n+------+---------------------------------------+\n| o_id | JSON_OBJECTAGG(attribute, value)      |\n+------+---------------------------------------+\n|    2 | {\"color\": \"red\", \"fabric\": \"silk\"}    |\n|    3 | {\"color\": \"green\", \"shape\": \"square\"} |\n+------+---------------------------------------+\n2 rows in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(460,'MAX',35,'Syntax:\nMAX([DISTINCT] expr)\n\nReturns the maximum value of expr. MAX() may take a string argument; in\nsuch cases, it returns the maximum string value. See\nhttps://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html. The\nDISTINCT keyword can be used to find the maximum of the distinct values\nof expr, however, this produces the same result as omitting DISTINCT.\n\nIf there are no matching rows, MAX() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','mysql> SELECT student_name, MIN(test_score), MAX(test_score)\n       FROM student\n       GROUP BY student_name;\n','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(461,'MIN',35,'Syntax:\nMIN([DISTINCT] expr)\n\nReturns the minimum value of expr. MIN() may take a string argument; in\nsuch cases, it returns the minimum string value. See\nhttps://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html. The\nDISTINCT keyword can be used to find the minimum of the distinct values\nof expr, however, this produces the same result as omitting DISTINCT.\n\nIf there are no matching rows, MIN() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','mysql> SELECT student_name, MIN(test_score), MAX(test_score)\n       FROM student\n       GROUP BY student_name;\n','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(462,'STD',35,'Syntax:\nSTD(expr)\n\nReturns the population standard deviation of expr. STD() is a synonym\nfor the standard SQL function STDDEV_POP(), provided as a MySQL\nextension.\n\nIf there are no matching rows, STD() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(463,'STDDEV',35,'Syntax:\nSTDDEV(expr)\n\nReturns the population standard deviation of expr. STDDEV() is a\nsynonym for the standard SQL function STDDEV_POP(), provided for\ncompatibility with Oracle.\n\nIf there are no matching rows, STDDEV() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(464,'STDDEV_POP',35,'Syntax:\nSTDDEV_POP(expr)\n\nReturns the population standard deviation of expr (the square root of\nVAR_POP()). You can also use STD() or STDDEV(), which are equivalent\nbut not standard SQL.\n\nIf there are no matching rows, STDDEV_POP() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(465,'STDDEV_SAMP',35,'Syntax:\nSTDDEV_SAMP(expr)\n\nReturns the sample standard deviation of expr (the square root of\nVAR_SAMP().\n\nIf there are no matching rows, STDDEV_SAMP() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(466,'SUM',35,'Syntax:\nSUM([DISTINCT] expr)\n\nReturns the sum of expr. If the return set has no rows, SUM() returns\nNULL. The DISTINCT keyword can be used to sum only the distinct values\nof expr.\n\nIf there are no matching rows, SUM() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(467,'VAR_POP',35,'Syntax:\nVAR_POP(expr)\n\nReturns the population standard variance of expr. It considers rows as\nthe whole population, not as a sample, so it has the number of rows as\nthe denominator. You can also use VARIANCE(), which is equivalent but\nis not standard SQL.\n\nIf there are no matching rows, VAR_POP() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(468,'VAR_SAMP',35,'Syntax:\nVAR_SAMP(expr)\n\nReturns the sample variance of expr. That is, the denominator is the\nnumber of rows minus one.\n\nIf there are no matching rows, VAR_SAMP() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(469,'VARIANCE',35,'Syntax:\nVARIANCE(expr)\n\nReturns the population standard variance of expr. VARIANCE() is a\nsynonym for the standard SQL function VAR_POP(), provided as a MySQL\nextension.\n\nIf there are no matching rows, VARIANCE() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html'),(470,'ANY_VALUE',37,'ANY_VALUE(arg)\n\nThis function is useful for GROUP BY queries when the\nONLY_FULL_GROUP_BY SQL mode is enabled, for cases when MySQL rejects a\nquery that you know is valid for reasons that MySQL cannot determine.\nThe function return value and type are the same as the return value and\ntype of its argument, but the function result is not checked for the\nONLY_FULL_GROUP_BY SQL mode.\n\nFor example, if name is a nonindexed column, the following query fails\nwith ONLY_FULL_GROUP_BY enabled:\n\nmysql> SELECT name, address, MAX(age) FROM t GROUP BY name;\nERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP\nBY clause and contains nonaggregated column \'mydb.t.address\' which\nis not functionally dependent on columns in GROUP BY clause; this\nis incompatible with sql_mode=only_full_group_by\n\nThe failure occurs because address is a nonaggregated column that is\nneither named among GROUP BY columns nor functionally dependent on\nthem. As a result, the address value for rows within each name group is\nnondeterministic. There are multiple ways to cause MySQL to accept the\nquery:\n\no Alter the table to make name a primary key or a unique NOT NULL\n  column. This enables MySQL to determine that address is functionally\n  dependent on name; that is, address is uniquely determined by name.\n  (This technique is inapplicable if NULL must be permitted as a valid\n  name value.)\n\no Use ANY_VALUE() to refer to address:\n\nSELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;\n\n  In this case, MySQL ignores the nondeterminism of address values\n  within each name group and accepts the query. This may be useful if\n  you simply do not care which value of a nonaggregated column is\n  chosen for each group. ANY_VALUE() is not an aggregate function,\n  unlike functions such as SUM() or COUNT(). It simply acts to suppress\n  the test for nondeterminism.\n\no Disable ONLY_FULL_GROUP_BY. This is equivalent to using ANY_VALUE()\n  with ONLY_FULL_GROUP_BY enabled, as described in the previous item.\n\nANY_VALUE() is also useful if functional dependence exists between\ncolumns but MySQL cannot determine it. The following query is valid\nbecause age is functionally dependent on the grouping column age-1, but\nMySQL cannot tell that and rejects the query with ONLY_FULL_GROUP_BY\nenabled:\n\nSELECT age FROM t GROUP BY age-1;\n\nTo cause MySQL to accept the query, use ANY_VALUE():\n\nSELECT ANY_VALUE(age) FROM t GROUP BY age-1;\n\nANY_VALUE() can be used for queries that refer to aggregate functions\nin the absence of a GROUP BY clause:\n\nmysql> SELECT name, MAX(age) FROM t;\nERROR 1140 (42000): In aggregated query without GROUP BY, expression\n#1 of SELECT list contains nonaggregated column \'mydb.t.name\'; this\nis incompatible with sql_mode=only_full_group_by\n\nWithout GROUP BY, there is a single group and it is nondeterministic\nwhich name value to choose for the group. ANY_VALUE() tells MySQL to\naccept the query:\n\nSELECT ANY_VALUE(name), MAX(age) FROM t;\n\nIt may be that, due to some property of a given data set, you know that\na selected nonaggregated column is effectively functionally dependent\non a GROUP BY column. For example, an application may enforce\nuniqueness of one column with respect to another. In this case, using\nANY_VALUE() for the effectively functionally dependent column may make\nsense.\n\nFor additional discussion, see\nhttps://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(471,'DEFAULT',37,'Syntax:\nDEFAULT(col_name)\n\nReturns the default value for a table column. An error results if the\ncolumn has no default value.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> UPDATE t SET i = DEFAULT(i)+1 WHERE id < 100;\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(472,'INET_ATON',37,'Syntax:\nINET_ATON(expr)\n\nGiven the dotted-quad representation of an IPv4 network address as a\nstring, returns an integer that represents the numeric value of the\naddress in network byte order (big endian). INET_ATON() returns NULL if\nit does not understand its argument.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT INET_ATON(\'10.0.5.9\');\n        -> 167773449\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(473,'INET_NTOA',37,'Syntax:\nINET_NTOA(expr)\n\nGiven a numeric IPv4 network address in network byte order, returns the\ndotted-quad string representation of the address as a string in the\nconnection character set. INET_NTOA() returns NULL if it does not\nunderstand its argument.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT INET_NTOA(167773449);\n        -> \'10.0.5.9\'\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(474,'INET6_ATON',37,'Syntax:\nINET6_ATON(expr)\n\nGiven an IPv6 or IPv4 network address as a string, returns a binary\nstring that represents the numeric value of the address in network byte\norder (big endian). Because numeric-format IPv6 addresses require more\nbytes than the largest integer type, the representation returned by\nthis function has the VARBINARY data type: VARBINARY(16) for IPv6\naddresses and VARBINARY(4) for IPv4 addresses. If the argument is not a\nvalid address, INET6_ATON() returns NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT HEX(INET6_ATON(\'fdfe::5a55:caff:fefa:9089\'));\n        -> \'FDFE0000000000005A55CAFFFEFA9089\'\nmysql> SELECT HEX(INET6_ATON(\'10.0.5.9\'));\n        -> \'0A000509\'\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(475,'INET6_NTOA',37,'Syntax:\nINET6_NTOA(expr)\n\nGiven an IPv6 or IPv4 network address represented in numeric form as a\nbinary string, returns the string representation of the address as a\nstring in the connection character set. If the argument is not a valid\naddress, INET6_NTOA() returns NULL.\n\nINET6_NTOA() has these properties:\n\no It does not use operating system functions to perform conversions,\n  thus the output string is platform independent.\n\no The return string has a maximum length of 39 (4 x 8 + 7). Given this\n  statement:\n\nCREATE TABLE t AS SELECT INET6_NTOA(expr) AS c1;\n\n  The resulting table would have this definition:\n\nCREATE TABLE t (c1 VARCHAR(39) CHARACTER SET utf8 DEFAULT NULL);\n\no The return string uses lowercase letters for IPv6 addresses.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT INET6_NTOA(INET6_ATON(\'fdfe::5a55:caff:fefa:9089\'));\n        -> \'fdfe::5a55:caff:fefa:9089\'\nmysql> SELECT INET6_NTOA(INET6_ATON(\'10.0.5.9\'));\n        -> \'10.0.5.9\'\n\nmysql> SELECT INET6_NTOA(UNHEX(\'FDFE0000000000005A55CAFFFEFA9089\'));\n        -> \'fdfe::5a55:caff:fefa:9089\'\nmysql> SELECT INET6_NTOA(UNHEX(\'0A000509\'));\n        -> \'10.0.5.9\'\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(476,'IS_IPV4',37,'Syntax:\nIS_IPV4(expr)\n\nReturns 1 if the argument is a valid IPv4 address specified as a\nstring, 0 otherwise.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT IS_IPV4(\'10.0.5.9\'), IS_IPV4(\'10.0.5.256\');\n        -> 1, 0\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(477,'IS_IPV4_COMPAT',37,'Syntax:\nIS_IPV4_COMPAT(expr)\n\nThis function takes an IPv6 address represented in numeric form as a\nbinary string, as returned by INET6_ATON(). It returns 1 if the\nargument is a valid IPv4-compatible IPv6 address, 0 otherwise.\nIPv4-compatible addresses have the form ::ipv4_address.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT IS_IPV4_COMPAT(INET6_ATON(\'::10.0.5.9\'));\n        -> 1\nmysql> SELECT IS_IPV4_COMPAT(INET6_ATON(\'::ffff:10.0.5.9\'));\n        -> 0\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(478,'IS_IPV4_MAPPED',37,'Syntax:\nIS_IPV4_MAPPED(expr)\n\nThis function takes an IPv6 address represented in numeric form as a\nbinary string, as returned by INET6_ATON(). It returns 1 if the\nargument is a valid IPv4-mapped IPv6 address, 0 otherwise. IPv4-mapped\naddresses have the form ::ffff:ipv4_address.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT IS_IPV4_MAPPED(INET6_ATON(\'::10.0.5.9\'));\n        -> 0\nmysql> SELECT IS_IPV4_MAPPED(INET6_ATON(\'::ffff:10.0.5.9\'));\n        -> 1\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(479,'IS_IPV6',37,'Syntax:\nIS_IPV6(expr)\n\nReturns 1 if the argument is a valid IPv6 address specified as a\nstring, 0 otherwise. This function does not consider IPv4 addresses to\nbe valid IPv6 addresses.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT IS_IPV6(\'10.0.5.9\'), IS_IPV6(\'::1\');\n        -> 0, 1\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(480,'MASTER_POS_WAIT',37,'Syntax:\nMASTER_POS_WAIT(log_name,log_pos[,timeout][,channel])\n\nThis function is useful for control of source/replica synchronization.\nIt blocks until the replica has read and applied all updates up to the\nspecified position in the source log. The return value is the number of\nlog events the replica had to wait for to advance to the specified\nposition. The function returns NULL if the replica SQL thread is not\nstarted, the replica\'s source information is not initialized, the\narguments are incorrect, or an error occurs. It returns -1 if the\ntimeout has been exceeded. If the replica SQL thread stops while\nMASTER_POS_WAIT() is waiting, the function returns NULL. If the replica\nis past the specified position, the function returns immediately.\n\nOn a multithreaded replica, the function waits until expiry of the\nlimit set by the slave_checkpoint_group or slave_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 a timeout value is specified, MASTER_POS_WAIT() stops waiting when\ntimeout seconds have elapsed. timeout must be greater than 0; a zero or\nnegative timeout means no timeout.\n\nThe optional channel value enables you to name which replication\nchannel the function applies to. See\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(481,'NAME_CONST',37,'Syntax:\nNAME_CONST(name,value)\n\nReturns the given value. When used to produce a result set column,\nNAME_CONST() causes the column to have the given name. The arguments\nshould be constants.\n\nmysql> SELECT NAME_CONST(\'myname\', 14);\n+--------+\n| myname |\n+--------+\n|     14 |\n+--------+\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(482,'SLEEP',37,'Syntax:\nSLEEP(duration)\n\nSleeps (pauses) for the number of seconds given by the duration\nargument, then returns 0. The duration may have a fractional part. If\nthe argument is NULL or negative, SLEEP() produces a warning, or an\nerror in strict SQL mode.\n\nWhen sleep returns normally (without interruption), it returns 0:\n\nmysql> SELECT SLEEP(1000);\n+-------------+\n| SLEEP(1000) |\n+-------------+\n|           0 |\n+-------------+\n\nWhen SLEEP() is the only thing invoked by a query that is interrupted,\nit returns 1 and the query itself returns no error. This is true\nwhether the query is killed or times out:\n\no This statement is interrupted using KILL QUERY from another session:\n\nmysql> SELECT SLEEP(1000);\n+-------------+\n| SLEEP(1000) |\n+-------------+\n|           1 |\n+-------------+\n\no This statement is interrupted by timing out:\n\nmysql> SELECT /*+ MAX_EXECUTION_TIME(1) */ SLEEP(1000);\n+-------------+\n| SLEEP(1000) |\n+-------------+\n|           1 |\n+-------------+\n\nWhen SLEEP() is only part of a query that is interrupted, the query\nreturns an error:\n\no This statement is interrupted using KILL QUERY from another session:\n\nmysql> SELECT 1 FROM t1 WHERE SLEEP(1000);\nERROR 1317 (70100): Query execution was interrupted\n\no This statement is interrupted by timing out:\n\nmysql> SELECT /*+ MAX_EXECUTION_TIME(1000) */ 1 FROM t1 WHERE SLEEP(1000);\nERROR 3024 (HY000): Query execution was interrupted, maximum statement\nexecution time exceeded\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(483,'UUID',37,'Syntax:\nUUID()\n\nReturns a Universal Unique Identifier (UUID) generated according to RFC\n4122, \"A Universally Unique IDentifier (UUID) URN Namespace\"\n(http://www.ietf.org/rfc/rfc4122.txt).\n\nA UUID is designed as a number that is globally unique in space and\ntime. Two calls to UUID() are expected to generate two different\nvalues, even if these calls are performed on two separate devices not\nconnected to each other.\n\n*Warning*:\n\nAlthough UUID() values are intended to be unique, they are not\nnecessarily unguessable or unpredictable. If unpredictability is\nrequired, UUID values should be generated some other way.\n\nUUID() returns a value that conforms to UUID version 1 as described in\nRFC 4122. The value is a 128-bit number represented as a utf8 string of\nfive hexadecimal numbers in aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\nformat:\n\no The first three numbers are generated from the low, middle, and high\n  parts of a timestamp. The high part also includes the UUID version\n  number.\n\no The fourth number preserves temporal uniqueness in case the timestamp\n  value loses monotonicity (for example, due to daylight saving time).\n\no The fifth number is an IEEE 802 node number that provides spatial\n  uniqueness. A random number is substituted if the latter is not\n  available (for example, because the host device has no Ethernet card,\n  or it is unknown how to find the hardware address of an interface on\n  the host operating system). In this case, spatial uniqueness cannot\n  be guaranteed. Nevertheless, a collision should have very low\n  probability.\n\n  The MAC address of an interface is taken into account only on\n  FreeBSD, Linux, and Windows. On other operating systems, MySQL uses a\n  randomly generated 48-bit number.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT UUID();\n        -> \'6ccd780c-baba-1026-9564-5b8c656024db\'\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(484,'UUID_SHORT',37,'Syntax:\nUUID_SHORT()\n\nReturns a \"short\" universal identifier as a 64-bit unsigned integer.\nValues returned by UUID_SHORT() differ from the string-format 128-bit\nidentifiers returned by the UUID() function and have different\nuniqueness properties. The value of UUID_SHORT() is guaranteed to be\nunique if the following conditions hold:\n\no The server_id value of the current server is between 0 and 255 and is\n  unique among your set of source and replica servers\n\no You do not set back the system time for your server host between\n  mysqld restarts\n\no You invoke UUID_SHORT() on average fewer than 16 million times per\n  second between mysqld restarts\n\nThe UUID_SHORT() return value is constructed this way:\n\n  (server_id & 255) << 56\n+ (server_startup_time_in_seconds << 24)\n+ incremented_variable++;\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT UUID_SHORT();\n        -> 92395783831158784\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(485,'VALUES',37,'Syntax:\nVALUES(col_name)\n\nIn an INSERT ... ON DUPLICATE KEY UPDATE statement, you can use the\nVALUES(col_name) function in the UPDATE clause to refer to column\nvalues from the INSERT portion of the statement. In other words,\nVALUES(col_name) in the UPDATE clause refers to the value of col_name\nthat would be inserted, had no duplicate-key conflict occurred. This\nfunction is especially useful in multiple-row inserts. The VALUES()\nfunction is meaningful only in the ON DUPLICATE KEY UPDATE clause of\nINSERT statements and returns NULL otherwise. See\nhttps://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)\n    -> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);\n','https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'),(486,'ALTER DATABASE',38,'Syntax:\nALTER {DATABASE | SCHEMA} [db_name]\n    alter_option ...\nALTER {DATABASE | SCHEMA} db_name\n    UPGRADE DATA DIRECTORY NAME\n\nalter_option: {\n    [DEFAULT] CHARACTER SET [=] charset_name\n  | [DEFAULT] COLLATE [=] collation_name\n}\n\nALTER DATABASE enables you to change the overall characteristics of a\ndatabase. These characteristics are stored in the db.opt file in the\ndatabase directory. This statement requires the ALTER privilege on the\ndatabase. ALTER SCHEMA is a synonym for ALTER DATABASE.\n\nThe database name can be omitted from the first syntax, in which case\nthe statement applies to the default database. An error occurs if there\nis no default database.\n\no https://dev.mysql.com/doc/refman/5.7/en/alter-database.html#alter-dat\n  abase-charset\n\no https://dev.mysql.com/doc/refman/5.7/en/alter-database.html#alter-dat\n  abase-upgrading\n\nCharacter Set and Collation Options\n\nThe CHARACTER SET clause changes the default database character set.\nThe COLLATE clause changes the default database collation. For\ninformation about character set and collation names, see\nhttps://dev.mysql.com/doc/refman/5.7/en/charset.html.\n\nTo see the available character sets and collations, use the SHOW\nCHARACTER SET and SHOW COLLATION statements, respectively. See [HELP\nSHOW CHARACTER SET], and [HELP SHOW COLLATION].\n\nA stored routine that uses the database defaults when the routine is\ncreated includes those defaults as part of its definition. (In a stored\nroutine, variables with character data types use the database defaults\nif the character set or collation are not specified explicitly. See\n[HELP CREATE PROCEDURE].) If you change the default character set or\ncollation for a database, any stored routines that are to use the new\ndefaults must be dropped and recreated.\n\nUpgrading from Versions Older than MySQL 5.1\n\nThe syntax that includes the UPGRADE DATA DIRECTORY NAME clause updates\nthe name of the directory associated with the database to use the\nencoding implemented in MySQL 5.1 for mapping database names to\ndatabase directory names (see\nhttps://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html). This\nclause is for use under these conditions:\n\no It is intended when upgrading MySQL to 5.1 or later from older\n  versions.\n\no It is intended to update a database directory name to the current\n  encoding format if the name contains special characters that need\n  encoding.\n\no The statement is used by mysqlcheck (as invoked by mysql_upgrade).\n\nFor example, if a database in MySQL 5.0 has the name a-b-c, the name\ncontains instances of the - (dash) character. In MySQL 5.0, the\ndatabase directory is also named a-b-c, which is not necessarily safe\nfor all file systems. In MySQL 5.1 and later, the same database name is\nencoded as a@002db@002dc to produce a file system-neutral directory\nname.\n\nWhen a MySQL installation is upgraded to MySQL 5.1 or later from an\nolder version,the server displays a name such as a-b-c (which is in the\nold format) as #mysql50#a-b-c, and you must refer to the name using the\n#mysql50# prefix. Use UPGRADE DATA DIRECTORY NAME in this case to\nexplicitly tell the server to re-encode the database directory name to\nthe current encoding format:\n\nALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;\n\nAfter executing this statement, you can refer to the database as a-b-c\nwithout the special #mysql50# prefix.\n\n*Note*:\n\nThe UPGRADE DATA DIRECTORY NAME clause is deprecated in MySQL 5.7 and\nremoved in MySQL 8.0. If it is necessary to convert MySQL 5.0 database\nor table names, a workaround is to upgrade a MySQL 5.0 installation to\nMySQL 5.1 before upgrading to MySQL 8.0.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-database.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-database.html'),(487,'ALTER SCHEMA',38,'Syntax:\nALTER {DATABASE | SCHEMA} [db_name]\n    alter_option ...\nALTER {DATABASE | SCHEMA} db_name\n    UPGRADE DATA DIRECTORY NAME\n\nalter_option: {\n    [DEFAULT] CHARACTER SET [=] charset_name\n  | [DEFAULT] COLLATE [=] collation_name\n}\n\nALTER DATABASE enables you to change the overall characteristics of a\ndatabase. These characteristics are stored in the db.opt file in the\ndatabase directory. This statement requires the ALTER privilege on the\ndatabase. ALTER SCHEMA is a synonym for ALTER DATABASE.\n\nThe database name can be omitted from the first syntax, in which case\nthe statement applies to the default database. An error occurs if there\nis no default database.\n\no https://dev.mysql.com/doc/refman/5.7/en/alter-database.html#alter-dat\n  abase-charset\n\no https://dev.mysql.com/doc/refman/5.7/en/alter-database.html#alter-dat\n  abase-upgrading\n\nCharacter Set and Collation Options\n\nThe CHARACTER SET clause changes the default database character set.\nThe COLLATE clause changes the default database collation. For\ninformation about character set and collation names, see\nhttps://dev.mysql.com/doc/refman/5.7/en/charset.html.\n\nTo see the available character sets and collations, use the SHOW\nCHARACTER SET and SHOW COLLATION statements, respectively. See [HELP\nSHOW CHARACTER SET], and [HELP SHOW COLLATION].\n\nA stored routine that uses the database defaults when the routine is\ncreated includes those defaults as part of its definition. (In a stored\nroutine, variables with character data types use the database defaults\nif the character set or collation are not specified explicitly. See\n[HELP CREATE PROCEDURE].) If you change the default character set or\ncollation for a database, any stored routines that are to use the new\ndefaults must be dropped and recreated.\n\nUpgrading from Versions Older than MySQL 5.1\n\nThe syntax that includes the UPGRADE DATA DIRECTORY NAME clause updates\nthe name of the directory associated with the database to use the\nencoding implemented in MySQL 5.1 for mapping database names to\ndatabase directory names (see\nhttps://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html). This\nclause is for use under these conditions:\n\no It is intended when upgrading MySQL to 5.1 or later from older\n  versions.\n\no It is intended to update a database directory name to the current\n  encoding format if the name contains special characters that need\n  encoding.\n\no The statement is used by mysqlcheck (as invoked by mysql_upgrade).\n\nFor example, if a database in MySQL 5.0 has the name a-b-c, the name\ncontains instances of the - (dash) character. In MySQL 5.0, the\ndatabase directory is also named a-b-c, which is not necessarily safe\nfor all file systems. In MySQL 5.1 and later, the same database name is\nencoded as a@002db@002dc to produce a file system-neutral directory\nname.\n\nWhen a MySQL installation is upgraded to MySQL 5.1 or later from an\nolder version,the server displays a name such as a-b-c (which is in the\nold format) as #mysql50#a-b-c, and you must refer to the name using the\n#mysql50# prefix. Use UPGRADE DATA DIRECTORY NAME in this case to\nexplicitly tell the server to re-encode the database directory name to\nthe current encoding format:\n\nALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;\n\nAfter executing this statement, you can refer to the database as a-b-c\nwithout the special #mysql50# prefix.\n\n*Note*:\n\nThe UPGRADE DATA DIRECTORY NAME clause is deprecated in MySQL 5.7 and\nremoved in MySQL 8.0. If it is necessary to convert MySQL 5.0 database\nor table names, a workaround is to upgrade a MySQL 5.0 installation to\nMySQL 5.1 before upgrading to MySQL 8.0.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-database.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-database.html'),(488,'ALTER EVENT',38,'Syntax:\nALTER\n    [DEFINER = user]\n    EVENT event_name\n    [ON SCHEDULE schedule]\n    [ON COMPLETION [NOT] PRESERVE]\n    [RENAME TO new_event_name]\n    [ENABLE | DISABLE | DISABLE ON SLAVE]\n    [COMMENT \'string\']\n    [DO event_body]\n\nThe ALTER EVENT statement changes one or more of the characteristics of\nan existing event without the need to drop and recreate it. The syntax\nfor each of the DEFINER, ON SCHEDULE, ON COMPLETION, COMMENT, ENABLE /\nDISABLE, and DO clauses is exactly the same as when used with CREATE\nEVENT. (See [HELP CREATE EVENT].)\n\nAny user can alter an event defined on a database for which that user\nhas the EVENT privilege. When a user executes a successful ALTER EVENT\nstatement, that user becomes the definer for the affected event.\n\nALTER EVENT works only with an existing event:\n\nmysql> ALTER EVENT no_such_event \n     >     ON SCHEDULE \n     >       EVERY \'2:3\' DAY_HOUR;\nERROR 1517 (HY000): Unknown event \'no_such_event\'\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-event.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-event.html'),(489,'ALTER FUNCTION',38,'Syntax:\nALTER FUNCTION func_name [characteristic ...]\n\ncharacteristic: {\n    COMMENT \'string\'\n  | LANGUAGE SQL\n  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n  | SQL SECURITY { DEFINER | INVOKER }\n}\n\nThis statement can be used to change the characteristics of a stored\nfunction. More than one change may be specified in an ALTER FUNCTION\nstatement. However, you cannot change the parameters or body of a\nstored function using this statement; to make such changes, you must\ndrop and re-create the function using DROP FUNCTION and CREATE\nFUNCTION.\n\nYou must have the ALTER ROUTINE privilege for the function. (That\nprivilege is granted automatically to the function creator.) If binary\nlogging is enabled, the ALTER FUNCTION statement might also require the\nSUPER privilege, as described in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-function.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-function.html'),(490,'ALTER INSTANCE',38,'Syntax:\nALTER INSTANCE ROTATE INNODB MASTER KEY\n\nALTER INSTANCE, introduced in MySQL 5.7.11, defines actions applicable\nto a MySQL server instance. The statement supports these actions:\n\no ALTER INSTANCE ROTATE INNODB MASTER KEY\n\n  This action rotates the master encryption key used for InnoDB\n  tablespace encryption. Key rotation requires the SUPER privilege. To\n  perform this action, a keyring plugin must be installed and\n  configured. For instructions, see\n  https://dev.mysql.com/doc/refman/5.7/en/keyring.html.\n\n  ALTER INSTANCE ROTATE INNODB MASTER KEY supports concurrent DML.\n  However, it cannot be run concurrently with CREATE TABLE ...\n  ENCRYPTION or ALTER TABLE ... ENCRYPTION operations, and locks are\n  taken to prevent conflicts that could arise from concurrent execution\n  of these statements. If one of the conflicting statements is running,\n  it must complete before another can proceed.\n\n  ALTER INSTANCE actions are written to the binary log so that they can\n  be executed on replicated servers.\n\n  For additional ALTER INSTANCE ROTATE INNODB MASTER KEY usage\n  information, see\n  https://dev.mysql.com/doc/refman/5.7/en/innodb-data-encryption.html.\n  For information about keyring plugins, see\n  https://dev.mysql.com/doc/refman/5.7/en/keyring.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-instance.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-instance.html'),(491,'ALTER LOGFILE GROUP',38,'Syntax:\nALTER LOGFILE GROUP logfile_group\n    ADD UNDOFILE \'file_name\'\n    [INITIAL_SIZE [=] size]\n    [WAIT]\n    ENGINE [=] engine_name\n\nThis statement adds an UNDO file named \'file_name\' to an existing log\nfile group logfile_group. An ALTER LOGFILE GROUP statement has one and\nonly one ADD UNDOFILE clause. No DROP UNDOFILE clause is currently\nsupported.\n\n*Note*:\n\nAll NDB Cluster Disk Data objects share the same namespace. This means\nthat each Disk Data object must be uniquely named (and not merely each\nDisk Data object of a given type). For example, you cannot have a\ntablespace and an undo log file with the same name, or an undo log file\nand a data file with the same name.\n\nThe optional INITIAL_SIZE parameter sets the UNDO file\'s initial size\nin bytes; if not specified, the initial size defaults to 134217728 (128\nMB). You may optionally follow size with a one-letter abbreviation for\nan order of magnitude, similar to those used in my.cnf. Generally, this\nis one of the letters M (megabytes) or G (gigabytes). (Bug #13116514,\nBug #16104705, Bug #62858)\n\nOn 32-bit systems, the maximum supported value for INITIAL_SIZE is\n4294967296 (4 GB). (Bug #29186)\n\nThe minimum allowed value for INITIAL_SIZE is 1048576 (1 MB). (Bug\n#29574)\n\n*Note*:\n\nWAIT is parsed but otherwise ignored. This keyword currently has no\neffect, and is intended for future expansion.\n\nThe ENGINE parameter (required) determines the storage engine which is\nused by this log file group, with engine_name being the name of the\nstorage engine. Currently, the only accepted values for engine_name are\n\"NDBCLUSTER\" and \"NDB\". The two values are equivalent.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-logfile-group.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-logfile-group.html'),(492,'ALTER PROCEDURE',38,'Syntax:\nALTER PROCEDURE proc_name [characteristic ...]\n\ncharacteristic: {\n    COMMENT \'string\'\n  | LANGUAGE SQL\n  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n  | SQL SECURITY { DEFINER | INVOKER }\n}\n\nThis statement can be used to change the characteristics of a stored\nprocedure. More than one change may be specified in an ALTER PROCEDURE\nstatement. However, you cannot change the parameters or body of a\nstored procedure using this statement; to make such changes, you must\ndrop and re-create the procedure using DROP PROCEDURE and CREATE\nPROCEDURE.\n\nYou must have the ALTER ROUTINE privilege for the procedure. By\ndefault, that privilege is granted automatically to the procedure\ncreator. This behavior can be changed by disabling the\nautomatic_sp_privileges system variable. See\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-routines-privileges.html\n.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-procedure.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-procedure.html'),(493,'ALTER SERVER',38,'Syntax:\nALTER SERVER  server_name\n    OPTIONS (option [, option] ...)\n\nAlters the server information for server_name, adjusting any of the\noptions permitted in the CREATE SERVER statement. The corresponding\nfields in the mysql.servers table are updated accordingly. This\nstatement requires the SUPER privilege.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-server.html\n\n','ALTER SERVER s OPTIONS (USER \'sally\');\n','https://dev.mysql.com/doc/refman/5.7/en/alter-server.html'),(494,'ALTER TABLE',38,'Syntax:\nALTER TABLE tbl_name\n    [alter_option [, alter_option] ...]\n    [partition_options]\n\nalter_option: {\n    table_options\n  | ADD [COLUMN] col_name column_definition\n        [FIRST | AFTER col_name]\n  | ADD [COLUMN] (col_name column_definition,...)\n  | ADD {INDEX | KEY} [index_name]\n        [index_type] (key_part,...) [index_option] ...\n  | ADD {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name]\n        (key_part,...) [index_option] ...\n  | ADD [CONSTRAINT [symbol]] PRIMARY KEY\n        [index_type] (key_part,...)\n        [index_option] ...\n  | ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]\n        [index_name] [index_type] (key_part,...)\n        [index_option] ...\n  | ADD [CONSTRAINT [symbol]] FOREIGN KEY\n        [index_name] (col_name,...)\n        reference_definition\n  | ADD CHECK (expr)\n  | ALGORITHM [=] {DEFAULT | INPLACE | COPY}\n  | ALTER [COLUMN] col_name {\n        SET DEFAULT {literal | (expr)}\n      | DROP DEFAULT\n    }\n  | CHANGE [COLUMN] old_col_name new_col_name column_definition\n        [FIRST | AFTER col_name]\n  | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]\n  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]\n  | {DISABLE | ENABLE} KEYS\n  | {DISCARD | IMPORT} TABLESPACE\n  | DROP [COLUMN] col_name\n  | DROP {INDEX | KEY} index_name\n  | DROP PRIMARY KEY\n  | DROP FOREIGN KEY fk_symbol\n  | FORCE\n  | LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}\n  | MODIFY [COLUMN] col_name column_definition\n        [FIRST | AFTER col_name]\n  | ORDER BY col_name [, col_name] ...\n  | RENAME {INDEX | KEY} old_index_name TO new_index_name\n  | RENAME [TO | AS] new_tbl_name\n  | {WITHOUT | WITH} VALIDATION\n}\n\npartition_options:\n    partition_option [partition_option] ...\n\npartition_option: {\n    ADD PARTITION (partition_definition)\n  | DROP PARTITION partition_names\n  | DISCARD PARTITION {partition_names | ALL} TABLESPACE\n  | IMPORT PARTITION {partition_names | ALL} TABLESPACE\n  | TRUNCATE PARTITION {partition_names | ALL}\n  | COALESCE PARTITION number\n  | REORGANIZE PARTITION partition_names INTO (partition_definitions)\n  | EXCHANGE PARTITION partition_name WITH TABLE tbl_name [{WITH | WITHOUT} VALIDATION]\n  | ANALYZE PARTITION {partition_names | ALL}\n  | CHECK PARTITION {partition_names | ALL}\n  | OPTIMIZE PARTITION {partition_names | ALL}\n  | REBUILD PARTITION {partition_names | ALL}\n  | REPAIR PARTITION {partition_names | ALL}\n  | REMOVE PARTITIONING\n  | UPGRADE PARTITIONING\n}\n\nkey_part:\n    col_name [(length)] [ASC | DESC]\n\nindex_type:\n    USING {BTREE | HASH}\n\nindex_option: {\n    KEY_BLOCK_SIZE [=] value\n  | index_type\n  | WITH PARSER parser_name\n  | COMMENT \'string\'\n}\n\ntable_options:\n    table_option [[,] table_option] ...\n\ntable_option: {\n    AUTO_INCREMENT [=] value\n  | AVG_ROW_LENGTH [=] value\n  | [DEFAULT] CHARACTER SET [=] charset_name\n  | CHECKSUM [=] {0 | 1}\n  | [DEFAULT] COLLATE [=] collation_name\n  | COMMENT [=] \'string\'\n  | COMPRESSION [=] {\'ZLIB\' | \'LZ4\' | \'NONE\'}\n  | CONNECTION [=] \'connect_string\'\n  | {DATA | INDEX} DIRECTORY [=] \'absolute path to directory\'\n  | DELAY_KEY_WRITE [=] {0 | 1}\n  | ENCRYPTION [=] {\'Y\' | \'N\'}\n  | ENGINE [=] engine_name\n  | INSERT_METHOD [=] { NO | FIRST | LAST }\n  | KEY_BLOCK_SIZE [=] value\n  | MAX_ROWS [=] value\n  | MIN_ROWS [=] value\n  | PACK_KEYS [=] {0 | 1 | DEFAULT}\n  | PASSWORD [=] \'string\'\n  | ROW_FORMAT [=] {DEFAULT | DYNAMIC | FIXED | COMPRESSED | REDUNDANT | COMPACT}\n  | STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}\n  | STATS_PERSISTENT [=] {DEFAULT | 0 | 1}\n  | STATS_SAMPLE_PAGES [=] value\n  | TABLESPACE tablespace_name [STORAGE {DISK | MEMORY}]\n  | UNION [=] (tbl_name[,tbl_name]...)\n}\n\npartition_options:\n    (see CREATE TABLE options)\n\nALTER TABLE changes the structure of a table. For example, you can add\nor delete columns, create or destroy indexes, change the type of\nexisting columns, or rename columns or the table itself. You can also\nchange characteristics such as the storage engine used for the table or\nthe table comment.\n\no To use ALTER TABLE, you need ALTER, CREATE, and INSERT privileges for\n  the table. Renaming a table requires ALTER and DROP on the old table,\n  ALTER, CREATE, and INSERT on the new table.\n\no Following the table name, specify the alterations to be made. If none\n  are given, ALTER TABLE does nothing.\n\no The syntax for many of the permissible alterations is similar to\n  clauses of the CREATE TABLE statement. column_definition clauses use\n  the same syntax for ADD and CHANGE as for CREATE TABLE. For more\n  information, see [HELP CREATE TABLE].\n\no The word COLUMN is optional and can be omitted.\n\no Multiple ADD, ALTER, DROP, and CHANGE clauses are permitted in a\n  single ALTER TABLE statement, separated by commas. This is a MySQL\n  extension to standard SQL, which permits only one of each clause per\n  ALTER TABLE statement. For example, to drop multiple columns in a\n  single statement, do this:\n\nALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;\n\no If a storage engine does not support an attempted ALTER TABLE\n  operation, a warning may result. Such warnings can be displayed with\n  SHOW WARNINGS. See [HELP SHOW WARNINGS]. For information on\n  troubleshooting ALTER TABLE, see\n  https://dev.mysql.com/doc/refman/5.7/en/alter-table-problems.html.\n\no For information about generated columns, see\n  https://dev.mysql.com/doc/refman/5.7/en/alter-table-generated-columns\n  .html.\n\no For usage examples, see\n  https://dev.mysql.com/doc/refman/5.7/en/alter-table-examples.html.\n\no With the mysql_info()\n  (https://dev.mysql.com/doc/c-api/5.7/en/mysql-info.html) C API\n  function, you can find out how many rows were copied by ALTER TABLE.\n  See mysql_info()\n  (https://dev.mysql.com/doc/c-api/5.7/en/mysql-info.html).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-table.html'),(495,'ALTER TABLESPACE',38,'Syntax:\nALTER TABLESPACE tablespace_name\n    {ADD | DROP} DATAFILE \'file_name\'\n    [INITIAL_SIZE [=] size]\n    [WAIT]\n    ENGINE [=] engine_name\n\nThis statement is used either to add a new data file, or to drop a data\nfile from a tablespace.\n\nThe ADD DATAFILE variant enables you to specify an initial size using\nan INITIAL_SIZE clause, where size is measured in bytes; the default\nvalue is 134217728 (128 MB). You may optionally follow size with a\none-letter abbreviation for an order of magnitude, similar to those\nused in my.cnf. Generally, this is one of the letters M (megabytes) or\nG (gigabytes).\n\n*Note*:\n\nAll NDB Cluster Disk Data objects share the same namespace. This means\nthat each Disk Data object must be uniquely named (and not merely each\nDisk Data object of a given type). For example, you cannot have a\ntablespace and a data file with the same name, or an undo log file and\na tablespace with the same name.\n\nOn 32-bit systems, the maximum supported value for INITIAL_SIZE is\n4294967296 (4 GB). (Bug #29186)\n\nINITIAL_SIZE is rounded, explicitly, as for CREATE TABLESPACE.\n\nOnce a data file has been created, its size cannot be changed; however,\nyou can add more data files to the tablespace using additional ALTER\nTABLESPACE ... ADD DATAFILE statements.\n\nUsing DROP DATAFILE with ALTER TABLESPACE drops the data file\n\'file_name\' from the tablespace. You cannot drop a data file from a\ntablespace which is in use by any table; in other words, the data file\nmust be empty (no extents used). See\nhttps://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data-objects\n.html. In addition, any data file to be dropped must previously have\nbeen added to the tablespace with CREATE TABLESPACE or ALTER\nTABLESPACE.\n\nBoth ALTER TABLESPACE ... ADD DATAFILE and ALTER TABLESPACE ... DROP\nDATAFILE require an ENGINE clause which specifies the storage engine\nused by the tablespace. Currently, the only accepted values for\nengine_name are NDB and NDBCLUSTER.\n\nWAIT is parsed but otherwise ignored, and so has no effect in MySQL\n5.7. It is intended for future expansion.\n\nWhen ALTER TABLESPACE ... ADD DATAFILE is used with ENGINE = NDB, a\ndata file is created on each Cluster data node. You can verify that the\ndata files were created and obtain information about them by querying\nthe INFORMATION_SCHEMA.FILES table. For example, the following query\nshows all data files belonging to the tablespace named newts:\n\nmysql> SELECT LOGFILE_GROUP_NAME, FILE_NAME, EXTRA\n    -> FROM INFORMATION_SCHEMA.FILES\n    -> WHERE TABLESPACE_NAME = \'newts\' AND FILE_TYPE = \'DATAFILE\';\n+--------------------+--------------+----------------+\n| LOGFILE_GROUP_NAME | FILE_NAME    | EXTRA          |\n+--------------------+--------------+----------------+\n| lg_3               | newdata.dat  | CLUSTER_NODE=3 |\n| lg_3               | newdata.dat  | CLUSTER_NODE=4 |\n| lg_3               | newdata2.dat | CLUSTER_NODE=3 |\n| lg_3               | newdata2.dat | CLUSTER_NODE=4 |\n+--------------------+--------------+----------------+\n2 rows in set (0.03 sec)\n\nSee\nhttps://dev.mysql.com/doc/refman/5.7/en/information-schema-files-table.\nhtml.\n\nALTER TABLESPACE is useful only with Disk Data storage for NDB Cluster.\nSee\nhttps://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-tablespace.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-tablespace.html'),(496,'ALTER VIEW',38,'Syntax:\nALTER\n    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\n    [DEFINER = user]\n    [SQL SECURITY { DEFINER | INVOKER }]\n    VIEW view_name [(column_list)]\n    AS select_statement\n    [WITH [CASCADED | LOCAL] CHECK OPTION]\n\nThis statement changes the definition of a view, which must exist. The\nsyntax is similar to that for CREATE VIEW see [HELP CREATE VIEW]). This\nstatement requires the CREATE VIEW and DROP privileges for the view,\nand some privilege for each column referred to in the SELECT statement.\nALTER VIEW is permitted only to the definer or users with the SUPER\nprivilege.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-view.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-view.html'),(497,'CREATE DATABASE',38,'Syntax:\nCREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name\n    [create_option] ...\n\ncreate_option: [DEFAULT] {\n    CHARACTER SET [=] charset_name\n  | COLLATE [=] collation_name\n}\n\nCREATE DATABASE creates a database with the given name. To use this\nstatement, you need the CREATE privilege for the database. CREATE\nSCHEMA is a synonym for CREATE DATABASE.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-database.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-database.html'),(498,'CREATE SCHEMA',38,'Syntax:\nCREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name\n    [create_option] ...\n\ncreate_option: [DEFAULT] {\n    CHARACTER SET [=] charset_name\n  | COLLATE [=] collation_name\n}\n\nCREATE DATABASE creates a database with the given name. To use this\nstatement, you need the CREATE privilege for the database. CREATE\nSCHEMA is a synonym for CREATE DATABASE.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-database.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-database.html'),(499,'CREATE EVENT',38,'Syntax:\nCREATE\n    [DEFINER = user]\n    EVENT\n    [IF NOT EXISTS]\n    event_name\n    ON SCHEDULE schedule\n    [ON COMPLETION [NOT] PRESERVE]\n    [ENABLE | DISABLE | DISABLE ON SLAVE]\n    [COMMENT \'string\']\n    DO event_body;\n\nschedule: {\n    AT timestamp [+ INTERVAL interval] ...\n  | EVERY interval\n    [STARTS timestamp [+ INTERVAL interval] ...]\n    [ENDS timestamp [+ INTERVAL interval] ...]\n}\n\ninterval:\n    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |\n              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |\n              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}\n\nThis statement creates and schedules a new event. The event does not\nrun unless the Event Scheduler is enabled. For information about\nchecking Event Scheduler status and enabling it if necessary, see\nhttps://dev.mysql.com/doc/refman/5.7/en/events-configuration.html.\n\nCREATE EVENT requires the EVENT privilege for the schema in which the\nevent is to be created. If the DEFINER clause is present, the\nprivileges required depend on the user value, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html.\n\nThe minimum requirements for a valid CREATE EVENT statement are as\nfollows:\n\no The keywords CREATE EVENT plus an event name, which uniquely\n  identifies the event in a database schema.\n\no An ON SCHEDULE clause, which determines when and how often the event\n  executes.\n\no A DO clause, which contains the SQL statement to be executed by an\n  event.\n\nThis is an example of a minimal CREATE EVENT statement:\n\nCREATE EVENT myevent\n    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n    DO\n      UPDATE myschema.mytable SET mycol = mycol + 1;\n\nThe previous statement creates an event named myevent. This event\nexecutes once---one hour following its creation---by running an SQL\nstatement that increments the value of the myschema.mytable table\'s\nmycol column by 1.\n\nThe event_name must be a valid MySQL identifier with a maximum length\nof 64 characters. Event names are not case-sensitive, so you cannot\nhave two events named myevent and MyEvent in the same schema. In\ngeneral, the rules governing event names are the same as those for\nnames of stored routines. See\nhttps://dev.mysql.com/doc/refman/5.7/en/identifiers.html.\n\nAn event is associated with a schema. If no schema is indicated as part\nof event_name, the default (current) schema is assumed. To create an\nevent in a specific schema, qualify the event name with a schema using\nschema_name.event_name syntax.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-event.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-event.html'),(500,'CREATE INDEX',38,'Syntax:\nCREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name\n    [index_type]\n    ON tbl_name (key_part,...)\n    [index_option]\n    [algorithm_option | lock_option] ...\n\nkey_part:\n    col_name [(length)] [ASC | DESC]\n\nindex_option: {\n    KEY_BLOCK_SIZE [=] value\n  | index_type\n  | WITH PARSER parser_name\n  | COMMENT \'string\'\n}\n\nindex_type:\n    USING {BTREE | HASH}\n\nalgorithm_option:\n    ALGORITHM [=] {DEFAULT | INPLACE | COPY}\n\nlock_option:\n    LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}\n\nNormally, you create all indexes on a table at the time the table\nitself is created with CREATE TABLE. See [HELP CREATE TABLE]. This\nguideline is especially important for InnoDB tables, where the primary\nkey determines the physical layout of rows in the data file. CREATE\nINDEX enables you to add indexes to existing tables.\n\nCREATE INDEX is mapped to an ALTER TABLE statement to create indexes.\nSee [HELP ALTER TABLE]. CREATE INDEX cannot be used to create a PRIMARY\nKEY; use ALTER TABLE instead. For more information about indexes, see\nhttps://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-index.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-index.html'),(501,'CREATE LOGFILE GROUP',38,'Syntax:\nCREATE LOGFILE GROUP logfile_group\n    ADD UNDOFILE \'undo_file\'\n    [INITIAL_SIZE [=] initial_size]\n    [UNDO_BUFFER_SIZE [=] undo_buffer_size]\n    [REDO_BUFFER_SIZE [=] redo_buffer_size]\n    [NODEGROUP [=] nodegroup_id]\n    [WAIT]\n    [COMMENT [=] \'string\']\n    ENGINE [=] engine_name\n\nThis statement creates a new log file group named logfile_group having\na single UNDO file named \'undo_file\'. A CREATE LOGFILE GROUP statement\nhas one and only one ADD UNDOFILE clause. For rules covering the naming\nof log file groups, see\nhttps://dev.mysql.com/doc/refman/5.7/en/identifiers.html.\n\n*Note*:\n\nAll NDB Cluster Disk Data objects share the same namespace. This means\nthat each Disk Data object must be uniquely named (and not merely each\nDisk Data object of a given type). For example, you cannot have a\ntablespace and a log file group with the same name, or a tablespace and\na data file with the same name.\n\nThere can be only one log file group per NDB Cluster instance at any\ngiven time.\n\nThe optional INITIAL_SIZE parameter sets the UNDO file\'s initial size;\nif not specified, it defaults to 128M (128 megabytes). The optional\nUNDO_BUFFER_SIZE parameter sets the size used by the UNDO buffer for\nthe log file group; The default value for UNDO_BUFFER_SIZE is 8M (eight\nmegabytes); this value cannot exceed the amount of system memory\navailable. Both of these parameters are specified in bytes. You may\noptionally follow either or both of these with a one-letter\nabbreviation for an order of magnitude, similar to those used in\nmy.cnf. Generally, this is one of the letters M (for megabytes) or G\n(for gigabytes).\n\nMemory used for UNDO_BUFFER_SIZE comes from the global pool whose size\nis determined by the value of the SharedGlobalMemory data node\nconfiguration parameter. This includes any default value implied for\nthis option by the setting of the InitialLogFileGroup data node\nconfiguration parameter.\n\nThe maximum permitted for UNDO_BUFFER_SIZE is 629145600 (600 MB).\n\nOn 32-bit systems, the maximum supported value for INITIAL_SIZE is\n4294967296 (4 GB). (Bug #29186)\n\nThe minimum allowed value for INITIAL_SIZE is 1048576 (1 MB).\n\nThe ENGINE option determines the storage engine to be used by this log\nfile group, with engine_name being the name of the storage engine. In\nMySQL 5.7, this must be NDB (or NDBCLUSTER). If ENGINE is not set,\nMySQL tries to use the engine specified by the default_storage_engine\nserver system variable (formerly storage_engine\n(https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#s\nysvar_storage_engine)). In any case, if the engine is not specified as\nNDB or NDBCLUSTER, the CREATE LOGFILE GROUP statement appears to\nsucceed but actually fails to create the log file group, as shown here:\n\nmysql> CREATE LOGFILE GROUP lg1\n    ->     ADD UNDOFILE \'undo.dat\' INITIAL_SIZE = 10M;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS;\n+-------+------+------------------------------------------------------------------------------------------------+\n| Level | Code | Message                                                                                        |\n+-------+------+------------------------------------------------------------------------------------------------+\n| Error | 1478 | Table storage engine \'InnoDB\' does not support the create option \'TABLESPACE or LOGFILE GROUP\' |\n+-------+------+------------------------------------------------------------------------------------------------+\n1 row in set (0.00 sec)\n\nmysql> DROP LOGFILE GROUP lg1 ENGINE = NDB;\nERROR 1529 (HY000): Failed to drop LOGFILE GROUP\n\nmysql> CREATE LOGFILE GROUP lg1\n    ->     ADD UNDOFILE \'undo.dat\' INITIAL_SIZE = 10M\n    ->     ENGINE = NDB;\nQuery OK, 0 rows affected (2.97 sec)\n\nThe fact that the CREATE LOGFILE GROUP statement does not actually\nreturn an error when a non-NDB storage engine is named, but rather\nappears to succeed, is a known issue which we hope to address in a\nfuture release of NDB Cluster.\n\nREDO_BUFFER_SIZE, NODEGROUP, WAIT, and COMMENT are parsed but ignored,\nand so have no effect in MySQL 5.7. These options are intended for\nfuture expansion.\n\nWhen used with ENGINE [=] NDB, a log file group and associated UNDO log\nfile are created on each Cluster data node. You can verify that the\nUNDO files were created and obtain information about them by querying\nthe INFORMATION_SCHEMA.FILES table. For example:\n\nmysql> SELECT LOGFILE_GROUP_NAME, LOGFILE_GROUP_NUMBER, EXTRA\n    -> FROM INFORMATION_SCHEMA.FILES\n    -> WHERE FILE_NAME = \'undo_10.dat\';\n+--------------------+----------------------+----------------+\n| LOGFILE_GROUP_NAME | LOGFILE_GROUP_NUMBER | EXTRA          |\n+--------------------+----------------------+----------------+\n| lg_3               |                   11 | CLUSTER_NODE=3 |\n| lg_3               |                   11 | CLUSTER_NODE=4 |\n+--------------------+----------------------+----------------+\n2 rows in set (0.06 sec)\n\nCREATE LOGFILE GROUP is useful only with Disk Data storage for NDB\nCluster. See\nhttps://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-logfile-group.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-logfile-group.html'),(502,'CREATE PROCEDURE',38,'Syntax:\nCREATE\n    [DEFINER = user]\n    PROCEDURE sp_name ([proc_parameter[,...]])\n    [characteristic ...] routine_body\n\nCREATE\n    [DEFINER = user]\n    FUNCTION sp_name ([func_parameter[,...]])\n    RETURNS type\n    [characteristic ...] routine_body\n\nproc_parameter:\n    [ IN | OUT | INOUT ] param_name type\n\nfunc_parameter:\n    param_name type\n\ntype:\n    Any valid MySQL data type\n\ncharacteristic: {\n    COMMENT \'string\'\n  | LANGUAGE SQL\n  | [NOT] DETERMINISTIC\n  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n  | SQL SECURITY { DEFINER | INVOKER }\n}\n\nroutine_body:\n    Valid SQL routine statement\n\nThese statements are used to create a stored routine (a stored\nprocedure or function). That is, the specified routine becomes known to\nthe server. By default, a stored routine is associated with the default\ndatabase. To associate the routine explicitly with a given database,\nspecify the name as db_name.sp_name when you create it.\n\nThe CREATE FUNCTION statement is also used in MySQL to support loadable\nfunctions. See [HELP CREATE FUNCTION loadable function]. A loadable\nfunction can be regarded as an external stored function. Stored\nfunctions share their namespace with loadable functions. See\nhttps://dev.mysql.com/doc/refman/5.7/en/function-resolution.html, for\nthe rules describing how the server interprets references to different\nkinds of functions.\n\nTo invoke a stored procedure, use the CALL statement (see [HELP CALL]).\nTo invoke a stored function, refer to it in an expression. The function\nreturns a value during expression evaluation.\n\nCREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE\nprivilege. If the DEFINER clause is present, the privileges required\ndepend on the user value, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html.\nIf binary logging is enabled, CREATE FUNCTION might require the SUPER\nprivilege, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html.\n\nBy default, MySQL automatically grants the ALTER ROUTINE and EXECUTE\nprivileges to the routine creator. This behavior can be changed by\ndisabling the automatic_sp_privileges system variable. See\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-routines-privileges.html\n.\n\nThe DEFINER and SQL SECURITY clauses specify the security context to be\nused when checking access privileges at routine execution time, as\ndescribed later in this section.\n\nIf the routine name is the same as the name of a built-in SQL function,\na syntax error occurs unless you use a space between the name and the\nfollowing parenthesis when defining the routine or invoking it later.\nFor this reason, avoid using the names of existing SQL functions for\nyour own stored routines.\n\nThe IGNORE_SPACE SQL mode applies to built-in functions, not to stored\nroutines. It is always permissible to have spaces after a stored\nroutine name, regardless of whether IGNORE_SPACE is enabled.\n\nThe parameter list enclosed within parentheses must always be present.\nIf there are no parameters, an empty parameter list of () should be\nused. Parameter names are not case-sensitive.\n\nEach parameter is an IN parameter by default. To specify otherwise for\na parameter, use the keyword OUT or INOUT before the parameter name.\n\n*Note*:\n\nSpecifying a parameter as IN, OUT, or INOUT is valid only for a\nPROCEDURE. For a FUNCTION, parameters are always regarded as IN\nparameters.\n\nAn IN parameter passes a value into a procedure. The procedure might\nmodify the value, but the modification is not visible to the caller\nwhen the procedure returns. An OUT parameter passes a value from the\nprocedure back to the caller. Its initial value is NULL within the\nprocedure, and its value is visible to the caller when the procedure\nreturns. An INOUT parameter is initialized by the caller, can be\nmodified by the procedure, and any change made by the procedure is\nvisible to the caller when the procedure returns.\n\nFor each OUT or INOUT parameter, pass a user-defined variable in the\nCALL statement that invokes the procedure so that you can obtain its\nvalue when the procedure returns. If you are calling the procedure from\nwithin another stored procedure or function, you can also pass a\nroutine parameter or local routine variable as an OUT or INOUT\nparameter. If you are calling the procedure from within a trigger, you\ncan also pass NEW.col_name as an OUT or INOUT parameter.\n\nFor information about the effect of unhandled conditions on procedure\nparameters, see\nhttps://dev.mysql.com/doc/refman/5.7/en/conditions-and-parameters.html.\n\nRoutine parameters cannot be referenced in statements prepared within\nthe routine; see\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.htm\nl.\n\nThe following example shows a simple stored procedure that, given a\ncountry code, counts the number of cities for that country that appear\nin the city table of the world database. The country code is passed\nusing an IN parameter, and the city count is returned using an OUT\nparameter:\n\nmysql> delimiter //\n\nmysql> CREATE PROCEDURE citycount (IN country CHAR(3), OUT cities INT)\n       BEGIN\n         SELECT COUNT(*) INTO cities FROM world.city\n         WHERE CountryCode = country;\n       END//\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> delimiter ;\n\nmysql> CALL citycount(\'JPN\', @cities); -- cities in Japan\nQuery OK, 1 row affected (0.00 sec)\n\nmysql> SELECT @cities;\n+---------+\n| @cities |\n+---------+\n|     248 |\n+---------+\n1 row in set (0.00 sec)\n\nmysql> CALL citycount(\'FRA\', @cities); -- cities in France\nQuery OK, 1 row affected (0.00 sec)\n\nmysql> SELECT @cities;\n+---------+\n| @cities |\n+---------+\n|      40 |\n+---------+\n1 row in set (0.00 sec)\n\nThe example uses the mysql client delimiter command to change the\nstatement delimiter from ; to // while the procedure is being defined.\nThis enables the ; delimiter used in the procedure body to be passed\nthrough to the server rather than being interpreted by mysql itself.\nSee\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-programs-defining.html.\n\nThe RETURNS clause may be specified only for a FUNCTION, for which it\nis mandatory. It indicates the return type of the function, and the\nfunction body must contain a RETURN value statement. If the RETURN\nstatement returns a value of a different type, the value is coerced to\nthe proper type. For example, if a function specifies an ENUM or SET\nvalue in the RETURNS clause, but the RETURN statement returns an\ninteger, the value returned from the function is the string for the\ncorresponding ENUM member of set of SET members.\n\nThe following example function takes a parameter, performs an operation\nusing an SQL function, and returns the result. In this case, it is\nunnecessary to use delimiter because the function definition contains\nno internal ; statement delimiters:\n\nmysql> CREATE FUNCTION hello (s CHAR(20))\nmysql> RETURNS CHAR(50) DETERMINISTIC\n       RETURN CONCAT(\'Hello, \',s,\'!\');\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT hello(\'world\');\n+----------------+\n| hello(\'world\') |\n+----------------+\n| Hello, world!  |\n+----------------+\n1 row in set (0.00 sec)\n\nParameter types and function return types can be declared to use any\nvalid data type. The COLLATE attribute can be used if preceded by a\nCHARACTER SET specification.\n\nThe routine_body consists of a valid SQL routine statement. This can be\na simple statement such as SELECT or INSERT, or a compound statement\nwritten using BEGIN and END. Compound statements can contain\ndeclarations, loops, and other control structure statements. The syntax\nfor these statements is described in\nhttps://dev.mysql.com/doc/refman/5.7/en/sql-compound-statements.html.\nIn practice, stored functions tend to use compound statements, unless\nthe body consists of a single RETURN statement.\n\nMySQL permits routines to contain DDL statements, such as CREATE and\nDROP. MySQL also permits stored procedures (but not stored functions)\nto contain SQL transaction statements such as COMMIT. Stored functions\nmay not contain statements that perform explicit or implicit commit or\nrollback. Support for these statements is not required by the SQL\nstandard, which states that each DBMS vendor may decide whether to\npermit them.\n\nStatements that return a result set can be used within a stored\nprocedure but not within a stored function. This prohibition includes\nSELECT statements that do not have an INTO var_list clause and other\nstatements such as SHOW, EXPLAIN, and CHECK TABLE. For statements that\ncan be determined at function definition time to return a result set, a\nNot allowed to return a result set from a function error occurs\n(ER_SP_NO_RETSET\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_sp_no_retset)). For statements that can be determined only\nat runtime to return a result set, a PROCEDURE %s can\'t return a result\nset in the given context error occurs (ER_SP_BADSELECT\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_sp_badselect)).\n\nUSE statements within stored routines are not permitted. When a routine\nis invoked, an implicit USE db_name is performed (and undone when the\nroutine terminates). The causes the routine to have the given default\ndatabase while it executes. References to objects in databases other\nthan the routine default database should be qualified with the\nappropriate database name.\n\nFor additional information about statements that are not permitted in\nstored routines, see\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.htm\nl.\n\nFor information about invoking stored procedures from within programs\nwritten in a language that has a MySQL interface, see [HELP CALL].\n\nMySQL stores the sql_mode system variable setting in effect when a\nroutine is created or altered, and always executes the routine with\nthis setting in force, regardless of the current server SQL mode when\nthe routine begins executing.\n\nThe switch from the SQL mode of the invoker to that of the routine\noccurs after evaluation of arguments and assignment of the resulting\nvalues to routine parameters. If you define a routine in strict SQL\nmode but invoke it in nonstrict mode, assignment of arguments to\nroutine parameters does not take place in strict mode. If you require\nthat expressions passed to a routine be assigned in strict SQL mode,\nyou should invoke the routine with strict mode in effect.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html'),(503,'CREATE FUNCTION',38,'Syntax:\nCREATE\n    [DEFINER = user]\n    PROCEDURE sp_name ([proc_parameter[,...]])\n    [characteristic ...] routine_body\n\nCREATE\n    [DEFINER = user]\n    FUNCTION sp_name ([func_parameter[,...]])\n    RETURNS type\n    [characteristic ...] routine_body\n\nproc_parameter:\n    [ IN | OUT | INOUT ] param_name type\n\nfunc_parameter:\n    param_name type\n\ntype:\n    Any valid MySQL data type\n\ncharacteristic: {\n    COMMENT \'string\'\n  | LANGUAGE SQL\n  | [NOT] DETERMINISTIC\n  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n  | SQL SECURITY { DEFINER | INVOKER }\n}\n\nroutine_body:\n    Valid SQL routine statement\n\nThese statements are used to create a stored routine (a stored\nprocedure or function). That is, the specified routine becomes known to\nthe server. By default, a stored routine is associated with the default\ndatabase. To associate the routine explicitly with a given database,\nspecify the name as db_name.sp_name when you create it.\n\nThe CREATE FUNCTION statement is also used in MySQL to support loadable\nfunctions. See [HELP CREATE FUNCTION loadable function]. A loadable\nfunction can be regarded as an external stored function. Stored\nfunctions share their namespace with loadable functions. See\nhttps://dev.mysql.com/doc/refman/5.7/en/function-resolution.html, for\nthe rules describing how the server interprets references to different\nkinds of functions.\n\nTo invoke a stored procedure, use the CALL statement (see [HELP CALL]).\nTo invoke a stored function, refer to it in an expression. The function\nreturns a value during expression evaluation.\n\nCREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE\nprivilege. If the DEFINER clause is present, the privileges required\ndepend on the user value, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html.\nIf binary logging is enabled, CREATE FUNCTION might require the SUPER\nprivilege, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html.\n\nBy default, MySQL automatically grants the ALTER ROUTINE and EXECUTE\nprivileges to the routine creator. This behavior can be changed by\ndisabling the automatic_sp_privileges system variable. See\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-routines-privileges.html\n.\n\nThe DEFINER and SQL SECURITY clauses specify the security context to be\nused when checking access privileges at routine execution time, as\ndescribed later in this section.\n\nIf the routine name is the same as the name of a built-in SQL function,\na syntax error occurs unless you use a space between the name and the\nfollowing parenthesis when defining the routine or invoking it later.\nFor this reason, avoid using the names of existing SQL functions for\nyour own stored routines.\n\nThe IGNORE_SPACE SQL mode applies to built-in functions, not to stored\nroutines. It is always permissible to have spaces after a stored\nroutine name, regardless of whether IGNORE_SPACE is enabled.\n\nThe parameter list enclosed within parentheses must always be present.\nIf there are no parameters, an empty parameter list of () should be\nused. Parameter names are not case-sensitive.\n\nEach parameter is an IN parameter by default. To specify otherwise for\na parameter, use the keyword OUT or INOUT before the parameter name.\n\n*Note*:\n\nSpecifying a parameter as IN, OUT, or INOUT is valid only for a\nPROCEDURE. For a FUNCTION, parameters are always regarded as IN\nparameters.\n\nAn IN parameter passes a value into a procedure. The procedure might\nmodify the value, but the modification is not visible to the caller\nwhen the procedure returns. An OUT parameter passes a value from the\nprocedure back to the caller. Its initial value is NULL within the\nprocedure, and its value is visible to the caller when the procedure\nreturns. An INOUT parameter is initialized by the caller, can be\nmodified by the procedure, and any change made by the procedure is\nvisible to the caller when the procedure returns.\n\nFor each OUT or INOUT parameter, pass a user-defined variable in the\nCALL statement that invokes the procedure so that you can obtain its\nvalue when the procedure returns. If you are calling the procedure from\nwithin another stored procedure or function, you can also pass a\nroutine parameter or local routine variable as an OUT or INOUT\nparameter. If you are calling the procedure from within a trigger, you\ncan also pass NEW.col_name as an OUT or INOUT parameter.\n\nFor information about the effect of unhandled conditions on procedure\nparameters, see\nhttps://dev.mysql.com/doc/refman/5.7/en/conditions-and-parameters.html.\n\nRoutine parameters cannot be referenced in statements prepared within\nthe routine; see\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.htm\nl.\n\nThe following example shows a simple stored procedure that, given a\ncountry code, counts the number of cities for that country that appear\nin the city table of the world database. The country code is passed\nusing an IN parameter, and the city count is returned using an OUT\nparameter:\n\nmysql> delimiter //\n\nmysql> CREATE PROCEDURE citycount (IN country CHAR(3), OUT cities INT)\n       BEGIN\n         SELECT COUNT(*) INTO cities FROM world.city\n         WHERE CountryCode = country;\n       END//\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> delimiter ;\n\nmysql> CALL citycount(\'JPN\', @cities); -- cities in Japan\nQuery OK, 1 row affected (0.00 sec)\n\nmysql> SELECT @cities;\n+---------+\n| @cities |\n+---------+\n|     248 |\n+---------+\n1 row in set (0.00 sec)\n\nmysql> CALL citycount(\'FRA\', @cities); -- cities in France\nQuery OK, 1 row affected (0.00 sec)\n\nmysql> SELECT @cities;\n+---------+\n| @cities |\n+---------+\n|      40 |\n+---------+\n1 row in set (0.00 sec)\n\nThe example uses the mysql client delimiter command to change the\nstatement delimiter from ; to // while the procedure is being defined.\nThis enables the ; delimiter used in the procedure body to be passed\nthrough to the server rather than being interpreted by mysql itself.\nSee\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-programs-defining.html.\n\nThe RETURNS clause may be specified only for a FUNCTION, for which it\nis mandatory. It indicates the return type of the function, and the\nfunction body must contain a RETURN value statement. If the RETURN\nstatement returns a value of a different type, the value is coerced to\nthe proper type. For example, if a function specifies an ENUM or SET\nvalue in the RETURNS clause, but the RETURN statement returns an\ninteger, the value returned from the function is the string for the\ncorresponding ENUM member of set of SET members.\n\nThe following example function takes a parameter, performs an operation\nusing an SQL function, and returns the result. In this case, it is\nunnecessary to use delimiter because the function definition contains\nno internal ; statement delimiters:\n\nmysql> CREATE FUNCTION hello (s CHAR(20))\nmysql> RETURNS CHAR(50) DETERMINISTIC\n       RETURN CONCAT(\'Hello, \',s,\'!\');\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT hello(\'world\');\n+----------------+\n| hello(\'world\') |\n+----------------+\n| Hello, world!  |\n+----------------+\n1 row in set (0.00 sec)\n\nParameter types and function return types can be declared to use any\nvalid data type. The COLLATE attribute can be used if preceded by a\nCHARACTER SET specification.\n\nThe routine_body consists of a valid SQL routine statement. This can be\na simple statement such as SELECT or INSERT, or a compound statement\nwritten using BEGIN and END. Compound statements can contain\ndeclarations, loops, and other control structure statements. The syntax\nfor these statements is described in\nhttps://dev.mysql.com/doc/refman/5.7/en/sql-compound-statements.html.\nIn practice, stored functions tend to use compound statements, unless\nthe body consists of a single RETURN statement.\n\nMySQL permits routines to contain DDL statements, such as CREATE and\nDROP. MySQL also permits stored procedures (but not stored functions)\nto contain SQL transaction statements such as COMMIT. Stored functions\nmay not contain statements that perform explicit or implicit commit or\nrollback. Support for these statements is not required by the SQL\nstandard, which states that each DBMS vendor may decide whether to\npermit them.\n\nStatements that return a result set can be used within a stored\nprocedure but not within a stored function. This prohibition includes\nSELECT statements that do not have an INTO var_list clause and other\nstatements such as SHOW, EXPLAIN, and CHECK TABLE. For statements that\ncan be determined at function definition time to return a result set, a\nNot allowed to return a result set from a function error occurs\n(ER_SP_NO_RETSET\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_sp_no_retset)). For statements that can be determined only\nat runtime to return a result set, a PROCEDURE %s can\'t return a result\nset in the given context error occurs (ER_SP_BADSELECT\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_sp_badselect)).\n\nUSE statements within stored routines are not permitted. When a routine\nis invoked, an implicit USE db_name is performed (and undone when the\nroutine terminates). The causes the routine to have the given default\ndatabase while it executes. References to objects in databases other\nthan the routine default database should be qualified with the\nappropriate database name.\n\nFor additional information about statements that are not permitted in\nstored routines, see\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.htm\nl.\n\nFor information about invoking stored procedures from within programs\nwritten in a language that has a MySQL interface, see [HELP CALL].\n\nMySQL stores the sql_mode system variable setting in effect when a\nroutine is created or altered, and always executes the routine with\nthis setting in force, regardless of the current server SQL mode when\nthe routine begins executing.\n\nThe switch from the SQL mode of the invoker to that of the routine\noccurs after evaluation of arguments and assignment of the resulting\nvalues to routine parameters. If you define a routine in strict SQL\nmode but invoke it in nonstrict mode, assignment of arguments to\nroutine parameters does not take place in strict mode. If you require\nthat expressions passed to a routine be assigned in strict SQL mode,\nyou should invoke the routine with strict mode in effect.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html'),(504,'CREATE SERVER',38,'Syntax:\nCREATE SERVER server_name\n    FOREIGN DATA WRAPPER wrapper_name\n    OPTIONS (option [, option] ...)\n\noption: {\n    HOST character-literal\n  | DATABASE character-literal\n  | USER character-literal\n  | PASSWORD character-literal\n  | SOCKET character-literal\n  | OWNER character-literal\n  | PORT numeric-literal\n}\n\nThis statement creates the definition of a server for use with the\nFEDERATED storage engine. The CREATE SERVER statement creates a new row\nin the servers table in the mysql database. This statement requires the\nSUPER privilege.\n\nThe server_name should be a unique reference to the server. Server\ndefinitions are global within the scope of the server, it is not\npossible to qualify the server definition to a specific database.\nserver_name has a maximum length of 64 characters (names longer than 64\ncharacters are silently truncated), and is case-insensitive. You may\nspecify the name as a quoted string.\n\nThe wrapper_name is an identifier and may be quoted with single\nquotation marks.\n\nFor each option you must specify either a character literal or numeric\nliteral. Character literals are UTF-8, support a maximum length of 64\ncharacters and default to a blank (empty) string. String literals are\nsilently truncated to 64 characters. Numeric literals must be a number\nbetween 0 and 9999, default value is 0.\n\n*Note*:\n\nThe OWNER option is currently not applied, and has no effect on the\nownership or operation of the server connection that is created.\n\nThe CREATE SERVER statement creates an entry in the mysql.servers table\nthat can later be used with the CREATE TABLE statement when creating a\nFEDERATED table. The options that you specify are used to populate the\ncolumns in the mysql.servers table. The table columns are Server_name,\nHost, Db, Username, Password, Port and Socket.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-server.html\n\n','CREATE SERVER s\nFOREIGN DATA WRAPPER mysql\nOPTIONS (USER \'Remote\', HOST \'198.51.100.106\', DATABASE \'test\');\n','https://dev.mysql.com/doc/refman/5.7/en/create-server.html'),(505,'CREATE TABLE',38,'Syntax:\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n    (create_definition,...)\n    [table_options]\n    [partition_options]\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n    [(create_definition,...)]\n    [table_options]\n    [partition_options]\n    [IGNORE | REPLACE]\n    [AS] query_expression\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n    { LIKE old_tbl_name | (LIKE old_tbl_name) }\n\ncreate_definition: {\n    col_name column_definition\n  | {INDEX | KEY} [index_name] [index_type] (key_part,...)\n      [index_option] ...\n  | {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name] (key_part,...)\n      [index_option] ...\n  | [CONSTRAINT [symbol]] PRIMARY KEY\n      [index_type] (key_part,...)\n      [index_option] ...\n  | [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]\n      [index_name] [index_type] (key_part,...)\n      [index_option] ...\n  | [CONSTRAINT [symbol]] FOREIGN KEY\n      [index_name] (col_name,...)\n      reference_definition\n  | CHECK (expr)\n}\n\ncolumn_definition: {\n    data_type [NOT NULL | NULL] [DEFAULT default_value]\n      [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]\n      [COMMENT \'string\']\n      [COLLATE collation_name]\n      [COLUMN_FORMAT {FIXED | DYNAMIC | DEFAULT}]\n      [STORAGE {DISK | MEMORY}]\n      [reference_definition]\n  | data_type\n      [COLLATE collation_name]\n      [GENERATED ALWAYS] AS (expr)\n      [VIRTUAL | STORED] [NOT NULL | NULL]\n      [UNIQUE [KEY]] [[PRIMARY] KEY]\n      [COMMENT \'string\']\n      [reference_definition]\n}\n\ndata_type:\n    (see https://dev.mysql.com/doc/refman/5.7/en/data-types.html)\n\nkey_part:\n    col_name [(length)] [ASC | DESC]\n\nindex_type:\n    USING {BTREE | HASH}\n\nindex_option: {\n    KEY_BLOCK_SIZE [=] value\n  | index_type\n  | WITH PARSER parser_name\n  | COMMENT \'string\'\n}\n\nreference_definition:\n    REFERENCES tbl_name (key_part,...)\n      [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]\n      [ON DELETE reference_option]\n      [ON UPDATE reference_option]\n\nreference_option:\n    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT\n\ntable_options:\n    table_option [[,] table_option] ...\n\ntable_option: {\n    AUTO_INCREMENT [=] value\n  | AVG_ROW_LENGTH [=] value\n  | [DEFAULT] CHARACTER SET [=] charset_name\n  | CHECKSUM [=] {0 | 1}\n  | [DEFAULT] COLLATE [=] collation_name\n  | COMMENT [=] \'string\'\n  | COMPRESSION [=] {\'ZLIB\' | \'LZ4\' | \'NONE\'}\n  | CONNECTION [=] \'connect_string\'\n  | {DATA | INDEX} DIRECTORY [=] \'absolute path to directory\'\n  | DELAY_KEY_WRITE [=] {0 | 1}\n  | ENCRYPTION [=] {\'Y\' | \'N\'}\n  | ENGINE [=] engine_name\n  | INSERT_METHOD [=] { NO | FIRST | LAST }\n  | KEY_BLOCK_SIZE [=] value\n  | MAX_ROWS [=] value\n  | MIN_ROWS [=] value\n  | PACK_KEYS [=] {0 | 1 | DEFAULT}\n  | PASSWORD [=] \'string\'\n  | ROW_FORMAT [=] {DEFAULT | DYNAMIC | FIXED | COMPRESSED | REDUNDANT | COMPACT}\n  | STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}\n  | STATS_PERSISTENT [=] {DEFAULT | 0 | 1}\n  | STATS_SAMPLE_PAGES [=] value\n  | TABLESPACE tablespace_name [STORAGE {DISK | MEMORY}]\n  | UNION [=] (tbl_name[,tbl_name]...)\n}\n\npartition_options:\n    PARTITION BY\n        { [LINEAR] HASH(expr)\n        | [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list)\n        | RANGE{(expr) | COLUMNS(column_list)}\n        | LIST{(expr) | COLUMNS(column_list)} }\n    [PARTITIONS num]\n    [SUBPARTITION BY\n        { [LINEAR] HASH(expr)\n        | [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list) }\n      [SUBPARTITIONS num]\n    ]\n    [(partition_definition [, partition_definition] ...)]\n\npartition_definition:\n    PARTITION partition_name\n        [VALUES\n            {LESS THAN {(expr | value_list) | MAXVALUE}\n            |\n            IN (value_list)}]\n        [[STORAGE] ENGINE [=] engine_name]\n        [COMMENT [=] \'string\' ]\n        [DATA DIRECTORY [=] \'data_dir\']\n        [INDEX DIRECTORY [=] \'index_dir\']\n        [MAX_ROWS [=] max_number_of_rows]\n        [MIN_ROWS [=] min_number_of_rows]\n        [TABLESPACE [=] tablespace_name]\n        [(subpartition_definition [, subpartition_definition] ...)]\n\nsubpartition_definition:\n    SUBPARTITION logical_name\n        [[STORAGE] ENGINE [=] engine_name]\n        [COMMENT [=] \'string\' ]\n        [DATA DIRECTORY [=] \'data_dir\']\n        [INDEX DIRECTORY [=] \'index_dir\']\n        [MAX_ROWS [=] max_number_of_rows]\n        [MIN_ROWS [=] min_number_of_rows]\n        [TABLESPACE [=] tablespace_name]\n\nquery_expression:\n    SELECT ...   (Some valid select or union statement)\n\nCREATE TABLE creates a table with the given name. You must have the\nCREATE privilege for the table.\n\nBy default, tables are created in the default database, using the\nInnoDB storage engine. An error occurs if the table exists, if there is\nno default database, or if the database does not exist.\n\nMySQL has no limit on the number of tables. The underlying file system\nmay have a limit on the number of files that represent tables.\nIndividual storage engines may impose engine-specific constraints.\nInnoDB permits up to 4 billion tables.\n\nFor information about the physical representation of a table, see\nhttps://dev.mysql.com/doc/refman/5.7/en/create-table-files.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-table.html'),(506,'FOREIGN KEY',38,'MySQL supports foreign keys, which permit cross-referencing related\ndata across tables, and foreign key constraints, which help keep the\nrelated data consistent.\n\nA foreign key relationship involves a parent table that holds the\ninitial column values, and a child table with column values that\nreference the parent column values. A foreign key constraint is defined\non the child table.\n\nThe essential syntax for a defining a foreign key constraint in a\nCREATE TABLE or ALTER TABLE statement includes the following:\n\n[CONSTRAINT [symbol]] FOREIGN KEY\n    [index_name] (col_name, ...)\n    REFERENCES tbl_name (col_name,...)\n    [ON DELETE reference_option]\n    [ON UPDATE reference_option]\n\nreference_option:\n    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html\n\n','CREATE TABLE product (\n    category INT NOT NULL, id INT NOT NULL,\n    price DECIMAL,\n    PRIMARY KEY(category, id)\n)   ENGINE=INNODB;\n\nCREATE TABLE customer (\n    id INT NOT NULL,\n    PRIMARY KEY (id)\n)   ENGINE=INNODB;\n\nCREATE TABLE product_order (\n    no INT NOT NULL AUTO_INCREMENT,\n    product_category INT NOT NULL,\n    product_id INT NOT NULL,\n    customer_id INT NOT NULL,\n\n    PRIMARY KEY(no),\n    INDEX (product_category, product_id),\n    INDEX (customer_id),\n\n    FOREIGN KEY (product_category, product_id)\n      REFERENCES product(category, id)\n      ON UPDATE CASCADE ON DELETE RESTRICT,\n\n    FOREIGN KEY (customer_id)\n      REFERENCES customer(id)\n)   ENGINE=INNODB;\n','https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html'),(507,'CREATE TABLESPACE',38,'Syntax:\nCREATE TABLESPACE tablespace_name\n\n  InnoDB and NDB:\n    ADD DATAFILE \'file_name\'\n\n  InnoDB only:\n    [FILE_BLOCK_SIZE = value]\n\n  NDB only:\n    USE LOGFILE GROUP logfile_group\n    [EXTENT_SIZE [=] extent_size]\n    [INITIAL_SIZE [=] initial_size]\n    [AUTOEXTEND_SIZE [=] autoextend_size]\n    [MAX_SIZE [=] max_size]\n    [NODEGROUP [=] nodegroup_id]\n    [WAIT]\n    [COMMENT [=] \'string\']\n\n  InnoDB and NDB:\n    [ENGINE [=] engine_name]\n\nThis statement is used to create a tablespace. The precise syntax and\nsemantics depend on the storage engine used. In standard MySQL 5.7\nreleases, this is always an InnoDB tablespace. MySQL NDB Cluster 7.5\nalso supports tablespaces using the NDB storage engine in addition to\nthose using InnoDB.\n\no https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html#create\n  -tablespace-innodb\n\no https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html#create\n  -tablespace-ndb\n\no https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html#create\n  -tablespace-options\n\no https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html#create\n  -tablespace-notes\n\no https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html#create\n  -tablespace-innodb-examples\n\no https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html#create\n  -tablespace-ndb-examples\n\nConsiderations for InnoDB\n\nCREATE TABLESPACE syntax is used to create general tablespaces. A\ngeneral tablespace is a shared tablespace. It can hold multiple tables,\nand supports all table row formats. General tablespaces can be created\nin a location relative to or independent of the data directory.\n\nAfter creating an InnoDB general tablespace, you can use CREATE TABLE\ntbl_name ... TABLESPACE [=] tablespace_name or ALTER TABLE tbl_name\nTABLESPACE [=] tablespace_name to add tables to the tablespace. For\nmore information, see\nhttps://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html.\n\nConsiderations for NDB Cluster\n\nThis statement is used to create a tablespace, which can contain one or\nmore data files, providing storage space for NDB Cluster Disk Data\ntables (see\nhttps://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data.html).\nOne data file is created and added to the tablespace using this\nstatement. Additional data files may be added to the tablespace by\nusing the ALTER TABLESPACE statement (see [HELP ALTER TABLESPACE]).\n\n*Note*:\n\nAll NDB Cluster Disk Data objects share the same namespace. This means\nthat each Disk Data object must be uniquely named (and not merely each\nDisk Data object of a given type). For example, you cannot have a\ntablespace and a log file group with the same name, or a tablespace and\na data file with the same name.\n\nA log file group of one or more UNDO log files must be assigned to the\ntablespace to be created with the USE LOGFILE GROUP clause.\nlogfile_group must be an existing log file group created with CREATE\nLOGFILE GROUP (see [HELP CREATE LOGFILE GROUP]). Multiple tablespaces\nmay use the same log file group for UNDO logging.\n\nWhen setting EXTENT_SIZE or INITIAL_SIZE, you may optionally follow the\nnumber with a one-letter abbreviation for an order of magnitude,\nsimilar to those used in my.cnf. Generally, this is one of the letters\nM (for megabytes) or G (for gigabytes).\n\nINITIAL_SIZE and EXTENT_SIZE are subject to rounding as follows:\n\no EXTENT_SIZE is rounded up to the nearest whole multiple of 32K.\n\no INITIAL_SIZE is rounded down to the nearest whole multiple of 32K;\n  this result is rounded up to the nearest whole multiple of\n  EXTENT_SIZE (after any rounding).\n\n*Note*:\n\nNDB reserves 4% of a tablespace for data node restart operations. This\nreserved space cannot be used for data storage. This restriction\napplies beginning with NDB 7.6.\n\nThe rounding just described is done explicitly, and a warning is issued\nby the MySQL Server when any such rounding is performed. The rounded\nvalues are also used by the NDB kernel for calculating\nINFORMATION_SCHEMA.FILES column values and other purposes. However, to\navoid an unexpected result, we suggest that you always use whole\nmultiples of 32K in specifying these options.\n\nWhen CREATE TABLESPACE is used with ENGINE [=] NDB, a tablespace and\nassociated data file are created on each Cluster data node. You can\nverify that the data files were created and obtain information about\nthem by querying the INFORMATION_SCHEMA.FILES table. (See the example\nlater in this section.)\n\n(See\nhttps://dev.mysql.com/doc/refman/5.7/en/information-schema-files-table.\nhtml.)\n\nOptions\n\no ADD DATAFILE: Defines the name of a tablespace data file; this option\n  is always required. The file_name, including any specified path, must\n  be quoted with single or double quotation marks. File names (not\n  counting the file extension) and directory names must be at least one\n  byte in length. Zero length file names and directory names are not\n  supported.\n\n  Because there are considerable differences in how InnoDB and NDB\n  treat data files, the two storage engines are covered separately in\n  the discussion that follows.\n\n  InnoDB data files An InnoDB tablespace supports only a single data\n  file, whose name must include a .ibd extension.\n\n  For an InnoDB tablespace, the data file is created by default in the\n  MySQL data directory (datadir). To place the data file in a location\n  other than the default, include an absolute directory path or a path\n  relative to the default location.\n\n  When an InnoDB tablespace is created outside of the data directory,\n  an isl file is created in the data directory. To avoid conflicts with\n  implicitly created file-per-table tablespaces, creating an InnoDB\n  general tablespace in a subdirectory under the data directory is not\n  supported. When creating an InnoDB general tablespace outside of the\n  data directory, the directory must exist prior to creating the\n  tablespace.\n\n  *Note*:\n\n  In MySQL 5.7, ALTER TABLESPACE is not supported by InnoDB.\n\n  NDB data files An NDB tablespace supports multiple data files which\n  can have any legal file names; more data files can be added to an NDB\n  Cluster tablespace following its creation by using an ALTER\n  TABLESPACE statement.\n\n  An NDB tablespace data file is created by default in the data node\n  file system directory---that is, the directory named ndb_nodeid_fs/TS\n  under the data node\'s data directory (DataDir), where nodeid is the\n  data node\'s NodeId. To place the data file in a location other than\n  the default, include an absolute directory path or a path relative to\n  the default location. If the directory specified does not exist, NDB\n  attempts to create it; the system user account under which the data\n  node process is running must have the appropriate permissions to do\n  so.\n\n  *Note*:\n\n  When determining the path used for a data file, NDB does not expand\n  the ~ (tilde) character.\n\n  When multiple data nodes are run on the same physical host, the\n  following considerations apply:\n\n  o You cannot specify an absolute path when creating a data file.\n\n  o It is not possible to create tablespace data files outside the data\n    node file system directory, unless each data node has a separate\n    data directory.\n\n  o If each data node has its own data directory, data files can be\n    created anywhere within this directory.\n\n  o If each data node has its own data directory, it may also be\n    possible to create a data file outside the node\'s data directory\n    using a relative path, as long as this path resolves to a unique\n    location on the host file system for each data node running on that\n    host.\n\no FILE_BLOCK_SIZE: This option---which is specific to InnoDB, and is\n  ignored by NDB---defines the block size for the tablespace data file.\n  Values can be specified in bytes or kilobytes. For example, an 8\n  kilobyte file block size can be specified as 8192 or 8K. If you do\n  not specify this option, FILE_BLOCK_SIZE defaults to the\n  innodb_page_size value. FILE_BLOCK_SIZE is required when you intend\n  to use the tablespace for storing compressed InnoDB tables\n  (ROW_FORMAT=COMPRESSED). In this case, you must define the tablespace\n  FILE_BLOCK_SIZE when creating the tablespace.\n\n  If FILE_BLOCK_SIZE is equal the innodb_page_size value, the\n  tablespace can contain only tables having an uncompressed row format\n  (COMPACT, REDUNDANT, and DYNAMIC). Tables with a COMPRESSED row\n  format have a different physical page size than uncompressed tables.\n  Therefore, compressed tables cannot coexist in the same tablespace as\n  uncompressed tables.\n\n  For a general tablespace to contain compressed tables,\n  FILE_BLOCK_SIZE must be specified, and the FILE_BLOCK_SIZE value must\n  be a valid compressed page size in relation to the innodb_page_size\n  value. Also, the physical page size of the compressed table\n  (KEY_BLOCK_SIZE) must be equal to FILE_BLOCK_SIZE/1024. For example,\n  if innodb_page_size=16K, and FILE_BLOCK_SIZE=8K, the KEY_BLOCK_SIZE\n  of the table must be 8. For more information, see\n  https://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html.\n\no USE LOGFILE GROUP: Required for NDB, this is the name of a log file\n  group previously created using CREATE LOGFILE GROUP. Not supported\n  for InnoDB, where it fails with an error.\n\no EXTENT_SIZE: This option is specific to NDB, and is not supported by\n  InnoDB, where it fails with an error. EXTENT_SIZE sets the size, in\n  bytes, of the extents used by any files belonging to the tablespace.\n  The default value is 1M. The minimum size is 32K, and theoretical\n  maximum is 2G, although the practical maximum size depends on a\n  number of factors. In most cases, changing the extent size does not\n  have any measurable effect on performance, and the default value is\n  recommended for all but the most unusual situations.\n\n  An extent is a unit of disk space allocation. One extent is filled\n  with as much data as that extent can contain before another extent is\n  used. In theory, up to 65,535 (64K) extents may used per data file;\n  however, the recommended maximum is 32,768 (32K). The recommended\n  maximum size for a single data file is 32G---that is, 32K extents x 1\n  MB per extent. In addition, once an extent is allocated to a given\n  partition, it cannot be used to store data from a different\n  partition; an extent cannot store data from more than one partition.\n  This means, for example that a tablespace having a single datafile\n  whose INITIAL_SIZE (described in the following item) is 256 MB and\n  whose EXTENT_SIZE is 128M has just two extents, and so can be used to\n  store data from at most two different disk data table partitions.\n\n  You can see how many extents remain free in a given data file by\n  querying the INFORMATION_SCHEMA.FILES table, and so derive an\n  estimate for how much space remains free in the file. For further\n  discussion and examples, see\n  https://dev.mysql.com/doc/refman/5.7/en/information-schema-files-tabl\n  e.html.\n\no INITIAL_SIZE: This option is specific to NDB, and is not supported by\n  InnoDB, where it fails with an error.\n\n  The INITIAL_SIZE parameter sets the total size in bytes of the data\n  file that was specific using ADD DATATFILE. Once this file has been\n  created, its size cannot be changed; however, you can add more data\n  files to the tablespace using ALTER TABLESPACE ... ADD DATAFILE.\n\n  INITIAL_SIZE is optional; its default value is 134217728 (128 MB).\n\n  On 32-bit systems, the maximum supported value for INITIAL_SIZE is\n  4294967296 (4 GB).\n\no AUTOEXTEND_SIZE: Currently ignored by MySQL; reserved for possible\n  future use. Has no effect in any release of MySQL 5.7 or MySQL NDB\n  Cluster 7.5, regardless of the storage engine used.\n\no MAX_SIZE: Currently ignored by MySQL; reserved for possible future\n  use. Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster\n  7.5, regardless of the storage engine used.\n\no NODEGROUP: Currently ignored by MySQL; reserved for possible future\n  use. Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster\n  7.5, regardless of the storage engine used.\n\no WAIT: Currently ignored by MySQL; reserved for possible future use.\n  Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster 7.5,\n  regardless of the storage engine used.\n\no COMMENT: Currently ignored by MySQL; reserved for possible future\n  use. Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster\n  7.5, regardless of the storage engine used.\n\no ENGINE: Defines the storage engine which uses the tablespace, where\n  engine_name is the name of the storage engine. Currently, only the\n  InnoDB storage engine is supported by standard MySQL 5.7 releases.\n  MySQL NDB Cluster 7.5 supports both NDB and InnoDB tablespaces. The\n  value of the default_storage_engine system variable is used for\n  ENGINE if the option is not specified.\n\nNotes\n\no For the rules covering the naming of MySQL tablespaces, see\n  https://dev.mysql.com/doc/refman/5.7/en/identifiers.html. In addition\n  to these rules, the slash character (\"/\") is not permitted, nor can\n  you use names beginning with innodb_, as this prefix is reserved for\n  system use.\n\no Tablespaces do not support temporary tables.\n\no innodb_file_per_table, innodb_file_format, and innodb_file_format_max\n  settings have no influence on CREATE TABLESPACE operations.\n  innodb_file_per_table does not need to be enabled. General\n  tablespaces support all table row formats regardless of file format\n  settings. Likewise, general tablespaces support the addition of\n  tables of any row format using CREATE TABLE ... TABLESPACE,\n  regardless of file format settings.\n\no innodb_strict_mode is not applicable to general tablespaces.\n  Tablespace management rules are strictly enforced independently of\n  innodb_strict_mode. If CREATE TABLESPACE parameters are incorrect or\n  incompatible, the operation fails regardless of the\n  innodb_strict_mode setting. When a table is added to a general\n  tablespace using CREATE TABLE ... TABLESPACE or ALTER TABLE ...\n  TABLESPACE, innodb_strict_mode is ignored but the statement is\n  evaluated as if innodb_strict_mode is enabled.\n\no Use DROP TABLESPACE to remove a tablespace. All tables must be\n  dropped from a tablespace using DROP TABLE prior to dropping the\n  tablespace. Before dropping an NDB Cluster tablespace you must also\n  remove all its data files using one or more ALTER TABLESPACE ... DROP\n  DATATFILE statements. See\n  https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data-objec\n  ts.html.\n\no All parts of an InnoDB table added to an InnoDB general tablespace\n  reside in the general tablespace, including indexes and BLOB pages.\n\n  For an NDB table assigned to a tablespace, only those columns which\n  are not indexed are stored on disk, and actually use the tablespace\n  data files. Indexes and indexed columns for all NDB tables are always\n  kept in memory.\n\no Similar to the system tablespace, truncating or dropping tables\n  stored in a general tablespace creates free space internally in the\n  general tablespace .ibd data file which can only be used for new\n  InnoDB data. Space is not released back to the operating system as it\n  is for file-per-table tablespaces.\n\no A general tablespace is not associated with any database or schema.\n\no ALTER TABLE ... DISCARD TABLESPACE and ALTER TABLE ...IMPORT\n  TABLESPACE are not supported for tables that belong to a general\n  tablespace.\n\no The server uses tablespace-level metadata locking for DDL that\n  references general tablespaces. By comparison, the server uses\n  table-level metadata locking for DDL that references file-per-table\n  tablespaces.\n\no A generated or existing tablespace cannot be changed to a general\n  tablespace.\n\no Tables stored in a general tablespace can only be opened in MySQL\n  5.7.6 or later due to the addition of new table flags.\n\no There is no conflict between general tablespace names and\n  file-per-table tablespace names. The \"/\" character, which is present\n  in file-per-table tablespace names, is not permitted in general\n  tablespace names.\n\no mysqldump and mysqlpump do not dump InnoDB CREATE TABLESPACE\n  statements.\n\nInnoDB Examples\n\nThis example demonstrates creating a general tablespace and adding\nthree uncompressed tables of different row formats.\n\nmysql> CREATE TABLESPACE `ts1` ADD DATAFILE \'ts1.ibd\' ENGINE=INNODB;\n\nmysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=REDUNDANT;\n\nmysql> CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=COMPACT;\n\nmysql> CREATE TABLE t3 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=DYNAMIC;\n\nThis example demonstrates creating a general tablespace and adding a\ncompressed table. The example assumes a default innodb_page_size value\nof 16K. The FILE_BLOCK_SIZE of 8192 requires that the compressed table\nhave a KEY_BLOCK_SIZE of 8.\n\nmysql> CREATE TABLESPACE `ts2` ADD DATAFILE \'ts2.ibd\' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;\n\nmysql> CREATE TABLE t4 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;\n\nNDB Example\n\nSuppose that you wish to create an NDB Cluster Disk Data tablespace\nnamed myts using a datafile named mydata-1.dat. An NDB tablespace\nalways requires the use of a log file group consisting of one or more\nundo log files. For this example, we first create a log file group\nnamed mylg that contains one undo long file named myundo-1.dat, using\nthe CREATE LOGFILE GROUP statement shown here:\n\nmysql> CREATE LOGFILE GROUP myg1\n    ->     ADD UNDOFILE \'myundo-1.dat\'\n    ->     ENGINE=NDB;\nQuery OK, 0 rows affected (3.29 sec)\n\nNow you can create the tablespace previously described using the\nfollowing statement:\n\nmysql> CREATE TABLESPACE myts\n    ->     ADD DATAFILE \'mydata-1.dat\'\n    ->     USE LOGFILE GROUP mylg\n    ->     ENGINE=NDB;\nQuery OK, 0 rows affected (2.98 sec)\n\nYou can now create a Disk Data table using a CREATE TABLE statement\nwith the TABLESPACE and STORAGE DISK options, similar to what is shown\nhere:\n\nmysql> CREATE TABLE mytable (\n    ->     id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,\n    ->     lname VARCHAR(50) NOT NULL,\n    ->     fname VARCHAR(50) NOT NULL,\n    ->     dob DATE NOT NULL,\n    ->     joined DATE NOT NULL,\n    ->     INDEX(last_name, first_name)\n    -> )\n    ->     TABLESPACE myts STORAGE DISK\n    ->     ENGINE=NDB;\nQuery OK, 0 rows affected (1.41 sec)\n\nIt is important to note that only the dob and joined columns from\nmytable are actually stored on disk, due to the fact that the id,\nlname, and fname columns are all indexed.\n\nAs mentioned previously, when CREATE TABLESPACE is used with ENGINE [=]\nNDB, a tablespace and associated data file are created on each NDB\nCluster data node. You can verify that the data files were created and\nobtain information about them by querying the INFORMATION_SCHEMA.FILES\ntable, as shown here:\n\nmysql> SELECT FILE_NAME, FILE_TYPE, LOGFILE_GROUP_NAME, STATUS, EXTRA\n    ->     FROM INFORMATION_SCHEMA.FILES\n    ->     WHERE TABLESPACE_NAME = \'myts\';\n\n+--------------+------------+--------------------+--------+----------------+\n| file_name    | file_type  | logfile_group_name | status | extra          |\n+--------------+------------+--------------------+--------+----------------+\n| mydata-1.dat | DATAFILE   | mylg               | NORMAL | CLUSTER_NODE=5 |\n| mydata-1.dat | DATAFILE   | mylg               | NORMAL | CLUSTER_NODE=6 |\n| NULL         | TABLESPACE | mylg               | NORMAL | NULL           |\n+--------------+------------+--------------------+--------+----------------+\n3 rows in set (0.01 sec)\n\nFor additional information and examples, see\nhttps://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data-objects\n.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html'),(508,'CREATE TRIGGER',38,'Syntax:\nCREATE\n    [DEFINER = user]\n    TRIGGER trigger_name\n    trigger_time trigger_event\n    ON tbl_name FOR EACH ROW\n    [trigger_order]\n    trigger_body\n\ntrigger_time: { BEFORE | AFTER }\n\ntrigger_event: { INSERT | UPDATE | DELETE }\n\ntrigger_order: { FOLLOWS | PRECEDES } other_trigger_name\n\nThis statement creates a new trigger. A trigger is a named database\nobject that is associated with a table, and that activates when a\nparticular event occurs for the table. The trigger becomes associated\nwith the table named tbl_name, which must refer to a permanent table.\nYou cannot associate a trigger with a TEMPORARY table or a view.\n\nTrigger names exist in the schema namespace, meaning that all triggers\nmust have unique names within a schema. Triggers in different schemas\ncan have the same name.\n\nThis section describes CREATE TRIGGER syntax. For additional\ndiscussion, see\nhttps://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html.\n\nCREATE TRIGGER requires the TRIGGER privilege for the table associated\nwith the trigger. If the DEFINER clause is present, the privileges\nrequired depend on the user value, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html.\nIf binary logging is enabled, CREATE TRIGGER might require the SUPER\nprivilege, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html.\n\nThe DEFINER clause determines the security context to be used when\nchecking access privileges at trigger activation time, as described\nlater in this section.\n\ntrigger_time is the trigger action time. It can be BEFORE or AFTER to\nindicate that the trigger activates before or after each row to be\nmodified.\n\nBasic column value checks occur prior to trigger activation, so you\ncannot use BEFORE triggers to convert values inappropriate for the\ncolumn type to valid values.\n\ntrigger_event indicates the kind of operation that activates the\ntrigger. These trigger_event values are permitted:\n\no INSERT: The trigger activates whenever a new row is inserted into the\n  table (for example, through INSERT, LOAD DATA, and REPLACE\n  statements).\n\no UPDATE: The trigger activates whenever a row is modified (for\n  example, through UPDATE statements).\n\no DELETE: The trigger activates whenever a row is deleted from the\n  table (for example, through DELETE and REPLACE statements). DROP\n  TABLE and TRUNCATE TABLE statements on the table do not activate this\n  trigger, because they do not use DELETE. Dropping a partition does\n  not activate DELETE triggers, either.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html'),