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;