diff --git a/README.md b/README.md index 5999c06f42e8e202a82298b6aae494a7cb556d91..a42a4ea7b98212c161d027a93e0d97225bc27c42 100755 --- a/README.md +++ b/README.md @@ -31,6 +31,11 @@ The use of untested PHP versions is unsupported and may result in compatibility - 1.4.x: PHP versions 5.4 to 7.4 - 1.3.x: PHP versions 5.4 to 7.1 +## Supported MySQL / MariaDB versions + +As of v1.6.0 support for utf8mb4 is mandatory: MySQL 5.5.3+ \ +For best performance, Common Table Expressions (CTE) query support: MySQL 8.0+ / MariaDB 10.2.1+ + ## I forgot my Admin password!? Just run `php functions/scripts/reset-admin-password.php` in the cli and enter your new password diff --git a/db/SCHEMA.sql b/db/SCHEMA.sql index c9744daaad7dae9cd3ad717b4a204a35097ca89e..f4cb81c84363674d5171e992b56a95b41243e62b 100755 --- a/db/SCHEMA.sql +++ b/db/SCHEMA.sql @@ -6,7 +6,7 @@ CREATE TABLE `instructions` ( `id` int(11) NOT NULL, `instructions` text, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `instructions` (`id`, `instructions`) VALUES @@ -33,7 +33,7 @@ CREATE TABLE `customers` ( `status` set('Active','Reserved','Inactive') DEFAULT 'Active', PRIMARY KEY (`id`), UNIQUE KEY `title` (`title`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table ipaddresses @@ -67,7 +67,7 @@ CREATE TABLE `ipaddresses` ( KEY `location` (`location`), KEY `customer_ip` (`customer_id`), CONSTRAINT `customer_ip` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `ipaddresses` (`id`, `subnetId`, `ip_addr`, `description`, `hostname`, `state`) VALUES @@ -96,7 +96,7 @@ CREATE TABLE `logs` ( `command` text DEFAULT NULL, `details` text DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table requests @@ -118,7 +118,7 @@ CREATE TABLE `requests` ( `accepted` binary(1) DEFAULT NULL, `adminComment` text, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table sections @@ -142,7 +142,7 @@ CREATE TABLE `sections` ( `DNS` VARCHAR(128) NULL DEFAULT NULL, PRIMARY KEY (`name`), UNIQUE KEY `id_2` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `sections` (`id`, `name`, `description`, `permissions`) VALUES @@ -225,7 +225,7 @@ CREATE TABLE `settings` ( `2fa_length` INT(2) NULL DEFAULT '16', `2fa_userchange` BOOL NOT NULL DEFAULT '1', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `settings` (`id`, `siteTitle`, `siteAdminName`, `siteAdminMail`, `siteDomain`, `siteURL`, `domainAuth`, `enableIPrequests`, `enableVRF`, `enableDNSresolving`, `version`, `donate`, `IPfilter`, `vlanDuplicate`, `subnetOrdering`, `visualLimit`) VALUES @@ -248,7 +248,7 @@ CREATE TABLE `settingsMail` ( `mAdminName` varchar(128) DEFAULT NULL, `mAdminMail` varchar(254) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `settingsMail` (`id`, `mtype`) VALUES @@ -298,7 +298,7 @@ CREATE TABLE `subnets` ( KEY `vrfId` (`vrfId`), KEY `customer_subnets` (`customer_id`), CONSTRAINT `customer_subnets` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `subnets` (`id`, `subnet`, `mask`, `sectionId`, `description`, `vrfId`, `masterSubnetId`, `allowRequests`, `vlanId`, `showName`, `permissions`, `isFolder`) VALUES @@ -341,7 +341,7 @@ CREATE TABLE `devices` ( PRIMARY KEY (`id`), KEY `hostname` (`hostname`), KEY `location` (`location`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table userGroups @@ -354,7 +354,7 @@ CREATE TABLE `userGroups` ( `g_desc` varchar(1024) DEFAULT NULL, `editDate` TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`g_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `userGroups` (`g_id`, `g_name`, `g_desc`) VALUES @@ -368,13 +368,13 @@ DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `username` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', + `username` varchar(255) NOT NULL DEFAULT '', `authMethod` INT(2) NULL DEFAULT 1, - `password` CHAR(128) COLLATE utf8_bin DEFAULT NULL, - `groups` varchar(1024) COLLATE utf8_bin DEFAULT NULL, - `role` text CHARACTER SET utf8, - `real_name` varchar(128) CHARACTER SET utf8 DEFAULT NULL, - `email` varchar(254) CHARACTER SET utf8 DEFAULT NULL, + `password` CHAR(128) DEFAULT NULL, + `groups` varchar(1024) DEFAULT NULL, + `role` text, + `real_name` varchar(128) DEFAULT NULL, + `email` varchar(254) DEFAULT NULL, `domainUser` binary(1) DEFAULT '0', `widgets` VARCHAR(1024) NULL DEFAULT 'statistics;favourite_subnets;changelog;top10_hosts_v4', `lang` INT(11) UNSIGNED NULL DEFAULT '9', @@ -395,11 +395,11 @@ CREATE TABLE `users` ( `theme` VARCHAR(32) NULL DEFAULT '', `token` VARCHAR(24) NULL DEFAULT NULL, `token_valid_until` DATETIME NULL, - `module_permissions` varchar(255) COLLATE utf8_bin DEFAULT '{"vlan":"1","l2dom":"1","vrf":"1","pdns":"1","circuits":"1","racks":"1","nat":"1","pstn":"1","customers":"1","locations":"1","devices":"1","routing":"1","vaults":"1"}', + `module_permissions` varchar(255) DEFAULT '{"vlan":"1","l2dom":"1","vrf":"1","pdns":"1","circuits":"1","racks":"1","nat":"1","pstn":"1","customers":"1","locations":"1","devices":"1","routing":"1","vaults":"1"}', `compress_actions` TINYINT(1) NULL DEFAULT '1', PRIMARY KEY (`username`), UNIQUE KEY `id_2` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `users` (`id`, `username`, `password`, `groups`, `role`, `real_name`, `email`, `domainUser`,`widgets`, `passChange`) VALUES @@ -415,7 +415,7 @@ CREATE TABLE `lang` ( `l_code` varchar(12) NOT NULL DEFAULT '', `l_name` varchar(32) DEFAULT NULL, PRIMARY KEY (`l_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `lang` (`l_id`, `l_code`, `l_name`) VALUES @@ -450,7 +450,7 @@ CREATE TABLE `vlans` ( PRIMARY KEY (`vlanId`), KEY `customer_vlans` (`customer_id`), CONSTRAINT `customer_vlans` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `vlans` (`vlanId`, `name`, `number`, `description`) VALUES @@ -468,7 +468,7 @@ CREATE TABLE `vlanDomains` ( `description` text, `permissions` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `vlanDomains` (`id`, `name`, `description`, `permissions`) VALUES @@ -490,7 +490,7 @@ CREATE TABLE `vrf` ( PRIMARY KEY (`vrfId`), KEY `customer_vrf` (`customer_id`), CONSTRAINT `customer_vrf` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table nameservers # ------------------------------------------------------------ @@ -504,7 +504,7 @@ CREATE TABLE `nameservers` ( `permissions` varchar(128) DEFAULT NULL, `editDate` TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `nameservers` (`name`, `namesrv1`, `description`, `permissions`) VALUES @@ -530,7 +530,7 @@ CREATE TABLE `api` ( `app_last_access` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `app_id` (`app_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table changelog @@ -549,7 +549,7 @@ CREATE TABLE `changelog` ( PRIMARY KEY (`cid`), KEY `coid` (`coid`), KEY `ctype` (`ctype`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table widgets @@ -567,7 +567,7 @@ CREATE TABLE `widgets` ( `wadminonly` enum('yes','no') NOT NULL DEFAULT 'no', `wactive` enum('yes','no') NOT NULL DEFAULT 'no', PRIMARY KEY (`wid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `widgets` (`wid`, `wtitle`, `wdescription`, `wfile`, `wparams`, `whref`, `wsize`, `wadminonly`, `wactive`) VALUES @@ -602,7 +602,7 @@ CREATE TABLE `deviceTypes` ( `tname` varchar(128) DEFAULT NULL, `tdescription` varchar(128) DEFAULT NULL, PRIMARY KEY (`tid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `deviceTypes` (`tid`, `tname`, `tdescription`) VALUES @@ -628,7 +628,7 @@ CREATE TABLE `loginAttempts` ( `count` int(2) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ip` (`ip`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table usersAuthMethod @@ -642,7 +642,7 @@ CREATE TABLE `usersAuthMethod` ( `protected` ENUM('Yes','No') NOT NULL DEFAULT 'Yes', `description` text, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `usersAuthMethod` (`id`, `type`, `params`, `protected`, `description`) VALUES @@ -664,7 +664,7 @@ CREATE TABLE `ipTags` ( `locked` set('No','Yes') NOT NULL DEFAULT 'No', `updateTag` TINYINT(1) NULL DEFAULT '0', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `ipTags` (`id`, `type`, `showtag`, `bgcolor`, `fgcolor`, `compress`, `locked`, `updateTag`) VALUES @@ -683,13 +683,13 @@ CREATE TABLE `firewallZones` ( `generator` tinyint(1) NOT NULL, `length` int(2) DEFAULT NULL, `padding` tinyint(1) DEFAULT NULL, - `zone` varchar(31) COLLATE utf8_unicode_ci NOT NULL, - `indicator` varchar(8) COLLATE utf8_unicode_ci NOT NULL, - `description` text COLLATE utf8_unicode_ci, - `permissions` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, + `zone` varchar(31) NOT NULL, + `indicator` varchar(8) NOT NULL, + `description` text, + `permissions` varchar(1024) DEFAULT NULL, `editDate` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table firewallZoneMapping @@ -699,14 +699,14 @@ DROP TABLE IF EXISTS `firewallZoneMapping`; CREATE TABLE `firewallZoneMapping` ( `id` int(11) NOT NULL AUTO_INCREMENT, `zoneId` int(11) unsigned NOT NULL, - `alias` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, + `alias` varchar(255) DEFAULT NULL, `deviceId` int(11) unsigned DEFAULT NULL, - `interface` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, + `interface` varchar(255) DEFAULT NULL, `editDate` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `devId_idx` (`deviceId`), CONSTRAINT `devId` FOREIGN KEY (`deviceId`) REFERENCES `devices` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table firewallZoneMapping @@ -729,7 +729,7 @@ CREATE TABLE `firewallZoneSubnet` ( REFERENCES `subnets` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table scanAgents @@ -745,7 +745,7 @@ CREATE TABLE `scanAgents` ( `last_access` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `code` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `scanAgents` (`id`, `name`, `description`, `type`) VALUES @@ -769,7 +769,7 @@ CREATE TABLE `nat` ( `policy` set('Yes','No') NOT NULL DEFAULT 'No', `policy_dst` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table racks # ------------------------------------------------------------ @@ -789,7 +789,7 @@ CREATE TABLE `racks` ( KEY `location` (`location`), KEY `customer_racks` (`customer_id`), CONSTRAINT `customer_racks` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table rackContents # ------------------------------------------------------------ @@ -803,7 +803,7 @@ CREATE TABLE `rackContents` ( `rack_size` int(11) unsigned DEFAULT NULL, PRIMARY KEY (`id`), KEY `rack` (`rack`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table locations @@ -818,7 +818,7 @@ CREATE TABLE `locations` ( `lat` varchar(31) DEFAULT NULL, `long` varchar(31) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -836,7 +836,7 @@ CREATE TABLE `pstnPrefixes` ( `deviceId` int(11) unsigned DEFAULT NULL, `description` text, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -854,7 +854,7 @@ CREATE TABLE `pstnNumbers` ( `deviceId` int(11) unsigned DEFAULT NULL, `description` text, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -868,7 +868,7 @@ CREATE TABLE `circuitProviders` ( `description` text, `contact` varchar(128) DEFAULT '', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -897,7 +897,7 @@ CREATE TABLE `circuits` ( KEY `location2` (`location2`), KEY `customer_circuits` (`customer_id`), CONSTRAINT `customer_circuits` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table circuitsLogical # ------------------------------------------------------------ @@ -911,7 +911,7 @@ CREATE TABLE `circuitsLogical` ( `member_count` int(4) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `circuitsLogical_UN` (`logical_cid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table circuitsLogicalMapping @@ -923,7 +923,7 @@ CREATE TABLE `circuitsLogicalMapping` ( `circuit_id` int(11) unsigned NOT NULL, `order` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`logicalCircuit_id`, `circuit_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table circuitTypes @@ -936,7 +936,7 @@ CREATE TABLE `circuitTypes` ( `ctcolor` varchar(7) DEFAULT '#000000', `ctpattern` enum('Solid','Dotted') DEFAULT 'Solid', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `circuitTypes` (`ctname`) VALUES ('Default'); @@ -951,7 +951,7 @@ CREATE TABLE `php_sessions` ( `data` text NOT NULL, `remote_ip` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table routing_bgp @@ -977,7 +977,7 @@ CREATE TABLE `routing_bgp` ( CONSTRAINT `circuit_id` FOREIGN KEY (`circuit_id`) REFERENCES `circuits` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `cust_id` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `vrf_id` FOREIGN KEY (`vrf_id`) REFERENCES `vrf` (`vrfId`) ON DELETE SET NULL ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table routing_subnets @@ -996,7 +996,7 @@ CREATE TABLE `routing_subnets` ( KEY `subnet_id` (`subnet_id`), CONSTRAINT `bgp_id` FOREIGN KEY (`object_id`) REFERENCES `routing_bgp` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `subnet_id` FOREIGN KEY (`subnet_id`) REFERENCES `subnets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table vaults @@ -1010,7 +1010,7 @@ CREATE TABLE `vaults` ( `description` text, `test` char(128) NOT NULL DEFAULT '', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table vaultItems @@ -1026,7 +1026,7 @@ CREATE TABLE `vaultItems` ( PRIMARY KEY (`id`), KEY `vaultId` (`vaultId`), CONSTRAINT `vaultItems_ibfk_1` FOREIGN KEY (`vaultId`) REFERENCES `vaults` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table nominatim @@ -1037,7 +1037,7 @@ CREATE TABLE `nominatim` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `url` varchar(255) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /* insert default values */ INSERT INTO `nominatim` (`id`, `url`) VALUES (1, 'https://nominatim.openstreetmap.org/search'); @@ -1052,7 +1052,7 @@ CREATE TABLE `nominatim_cache` ( `query` text NOT NULL, `lat_lng` text NOT NULL, PRIMARY KEY (`sha256`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; # Dump of table -- for autofix comment, leave as it is diff --git a/functions/checks/check_php_build.php b/functions/checks/check_php_build.php index cc631f7e75cf8d73fa3c2da02448e1fa283e295b..b88cd21eb5f9b2e7cad8850e0832e09cceda6627 100755 --- a/functions/checks/check_php_build.php +++ b/functions/checks/check_php_build.php @@ -100,6 +100,9 @@ elseif ( !empty($missingFns) ) { $error[] = '</ul><hr>' . "\n"; $error[] = _('Please recompile PHP to include missing functions and restart Apache.'); } +elseif ( isset($Database) && !$Database->set_names ) { + $error[] = "<strong>"._('Your database server does not support utf8mb4').":</strong><br><hr>"; +} else { /* No issues, delete $error */ unset($error); diff --git a/functions/classes/class.PDO.php b/functions/classes/class.PDO.php index 7eba760ffcf506249cb33c97ea6691bbb9206abd..7a2af79356a6a2d36427d5838ceb89e97fa03078 100644 --- a/functions/classes/class.PDO.php +++ b/functions/classes/class.PDO.php @@ -36,7 +36,14 @@ abstract class DB { * @var string * @access protected */ - protected $charset = 'utf8'; + protected $charset = 'utf8mb4'; + + /** + * Database supports $charset + * + * @var bool + */ + public $set_names = false; /** * pdo @@ -187,7 +194,12 @@ abstract class DB { throw new Exception ("Could not connect to database! ".$e->getMessage()); } - @$this->pdo->query('SET NAMES \'' . $this->charset . '\';'); + try { + $this->pdo->query('SET NAMES \'' . $this->charset . '\';'); + $this->set_names = true; + } catch (Exception $e) { + $this->set_names = false; + } } /** @@ -284,7 +296,7 @@ abstract class DB { } /** - * MySQL CTE support checks + * MySQL CTE support check * * @access public * @return bool diff --git a/misc/CHANGELOG b/misc/CHANGELOG index 1aa60b190957406cd2c9171da420efd77cd6b902..34821ae35b05774161dfd134c6e11ccb4273a827 100755 --- a/misc/CHANGELOG +++ b/misc/CHANGELOG @@ -3,6 +3,7 @@ Enhancements, changes: ---------------------------- + php8.1 compatibility (php8.x support is work-in-progress); + + MySQL 5.5.3+ is now required (support for utf8mb4); Security Fixes: ----------------------------