X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fmysqlschema.php;h=e284d1eb1851542ff573aff36cc77745f80b710b;hb=586fb5a5175d7a10f5f78dd026434e48202e5451;hp=435ba4e3a95f57f3ca0ba314db4fb483d0ca0b83;hpb=7a9777df053a9007b5eaa71f5437584065b615a5;p=quix0rs-gnu-social.git diff --git a/lib/mysqlschema.php b/lib/mysqlschema.php index 435ba4e3a9..e284d1eb18 100644 --- a/lib/mysqlschema.php +++ b/lib/mysqlschema.php @@ -58,10 +58,10 @@ class MysqlSchema extends Schema * @return Schema the (single) Schema object */ - static function get() + static function get($conn = null) { if (empty(self::$_single)) { - self::$_single = new Schema(); + self::$_single = new Schema($conn); } return self::$_single; } @@ -265,20 +265,20 @@ class MysqlSchema extends Schema * @param array $def * @return string; * - * @fixme ENGINE may need to be set differently in some cases, - * such as to support fulltext index. */ function endCreateTable($name, array $def) { $engine = $this->preferredEngine($def); - return ") ENGINE=$engine CHARACTER SET utf8 COLLATE utf8_bin"; + return ") ENGINE=$engine CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"; } - + function preferredEngine($def) { + /* MyISAM is no longer required for fulltext indexes, fortunately if (!empty($def['fulltext indexes'])) { return 'MyISAM'; } + */ return 'InnoDB'; } @@ -335,9 +335,10 @@ class MysqlSchema extends Schema if (strtolower($oldProps['ENGINE']) != strtolower($engine)) { $phrase[] = "ENGINE=$engine"; } - if (strtolower($oldProps['TABLE_COLLATION']) != 'utf8_bin') { - $phrase[] = 'DEFAULT CHARSET=utf8'; - $phrase[] = 'COLLATE=utf8_bin'; + if (strtolower($oldProps['TABLE_COLLATION']) != 'utf8mb4_bin') { + $phrase[] = 'CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin'; + $phrase[] = 'DEFAULT CHARACTER SET = utf8mb4'; + $phrase[] = 'DEFAULT COLLATE = utf8mb4_bin'; } } @@ -385,7 +386,7 @@ class MysqlSchema extends Schema $map = array('serial' => 'int', 'integer' => 'int', 'numeric' => 'decimal'); - + $type = $column['type']; if (isset($map[$type])) { $type = $map[$type]; @@ -435,13 +436,32 @@ class MysqlSchema extends Schema */ function filterDef(array $tableDef) { + $version = $this->conn->getVersion(); foreach ($tableDef['fields'] as $name => &$col) { if ($col['type'] == 'serial') { $col['type'] = 'int'; $col['auto_increment'] = true; } - if ($col['type'] == 'datetime' && isset($col['default']) && $col['default'] == 'CURRENT_TIMESTAMP') { - $col['type'] = 'timestamp'; + + // Avoid invalid date errors in MySQL 5.7+ + if ($col['type'] == 'timestamp' && !isset($col['default']) + && $version >= 50605) { + $col['default'] = 'CURRENT_TIMESTAMP'; + } + if ($col['type'] == 'datetime') { + // Avoid invalid date errors in MySQL 5.7+ + if (!isset($col['default']) && $version >= 50605) { + $col['default'] = 'CURRENT_TIMESTAMP'; + } + + // If we are using MySQL 5.5, convert datetime to timestamp if + // default value is CURRENT_TIMESTAMP. Not needed for MySQL 5.6+ + // and MariaDB 10.0+ + if (isset($col['default']) + && $col['default'] == 'CURRENT_TIMESTAMP' + && $version < 50605) { + $col['type'] = 'timestamp'; + } } $col['type'] = $this->mapType($col); unset($col['size']);