diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 24ed1425f6b..526d43de0ab 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -857,6 +857,7 @@ class DoliDBMysqli extends DoliDB * Return charset used to store data in current database (same result than using SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "databasename";) * * @return string Charset + * @see getDefaultCollationDatabase */ function getDefaultCharacterSetDatabase() { @@ -867,7 +868,9 @@ class DoliDBMysqli extends DoliDB return $this->forcecharset; } $liste=$this->fetch_array($resql); - return $liste['Value']; + $tmpval = $liste['Value']; + + return $tmpval; } /** @@ -900,6 +903,7 @@ class DoliDBMysqli extends DoliDB * Return collation used in current database * * @return string Collation value + * @see getDefaultCharacterSetDatabase */ function getDefaultCollationDatabase() { @@ -910,7 +914,9 @@ class DoliDBMysqli extends DoliDB return $this->forcecollate; } $liste=$this->fetch_array($resql); - return $liste['Value']; + $tmpval = $liste['Value']; + + return $tmpval; } /** diff --git a/htdocs/install/mysql/migration/repair.sql b/htdocs/install/mysql/migration/repair.sql index f9ec23d4f69..95840f73cb8 100755 --- a/htdocs/install/mysql/migration/repair.sql +++ b/htdocs/install/mysql/migration/repair.sql @@ -13,12 +13,17 @@ -- flush privileges; --- Requests to change character set and collation of a varchar column. --- utf8 and utf8_unicode_ci is recommended (or even better utf8mb4 and utf8mb4_unicode_ci with mysql 5.5.3+) +-- Request to change default pagecode + colation of database +-- ALTER DATABASE name_of_database CHARACTER SET utf8 COLLATE utf8_unicode_ci; +-- Request to change default pagecode + colation of table +-- ALTER TABLE name_of_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; + +-- Request to change character set and collation of a varchar column. +-- utf8 and utf8_unicode_ci is recommended (or even better utf8mb4 and utf8mb4_unicode_ci with mysql 5.5.3+) -- ALTER TABLE llx_accounting_account MODIFY account_number VARCHAR(20) CHARACTER SET utf8; -- ALTER TABLE llx_accounting_account MODIFY account_number VARCHAR(20) COLLATE utf8_unicode_ci; --- You can check with 'show full columns from llx_accounting_account'; +-- You can check with 'show full columns from mytablename'; diff --git a/htdocs/install/mysql/tables/llx_product_attribute.key.sql b/htdocs/install/mysql/tables/llx_product_attribute.key.sql index 28d687dbdda..f107a855e61 100644 --- a/htdocs/install/mysql/tables/llx_product_attribute.key.sql +++ b/htdocs/install/mysql/tables/llx_product_attribute.key.sql @@ -16,4 +16,5 @@ -- -- ============================================================================ -ALTER TABLE llx_product_attribute ADD CONSTRAINT unique_ref UNIQUE (ref); \ No newline at end of file +ALTER TABLE llx_product_attribute ADD UNIQUE INDEX uk_product_attribute_ref (ref); + diff --git a/htdocs/install/step1.php b/htdocs/install/step1.php index 9ad30fe5d7b..a0fdc22a015 100644 --- a/htdocs/install/step1.php +++ b/htdocs/install/step1.php @@ -312,8 +312,11 @@ if (! $error && $db->connected) // Define $defaultCharacterSet and $defaultDBSortingCollation if (! $error && $db->connected) { - if (!empty($db_create_database)) { // If we create database, we force default value - $defaultCharacterSet=$db->forcecharset; + if (!empty($db_create_database)) // If we create database, we force default value + { + // Default values come from the database handler + + $defaultCharacterSet=$db->forcecharset; $defaultDBSortingCollation=$db->forcecollate; } else // If already created, we take current value @@ -322,6 +325,14 @@ if (! $error && $db->connected) $defaultDBSortingCollation=$db->getDefaultCollationDatabase(); } + // Force to avoid utf8mb4 because index on field char 255 reach limit of 767 char for indexes (example with mysql 5.6.34 = mariadb 10.0.29) + // TODO Remove this when utf8mb4 is supported + if ($defaultCharacterSet == 'utf8mb4' || $defaultDBSortingCollation == 'utf8mb4_unicode_ci') + { + $defaultCharacterSet = 'utf8'; + $defaultDBSortingCollation = 'utf8_unicode_ci'; + } + print ''; print ''; $db_character_set=$defaultCharacterSet;