mysqldump-php icon indicating copy to clipboard operation
mysqldump-php copied to clipboard

Not default connection collation

Open sizov82 opened this issue 2 years ago • 3 comments

How to set not default collation for connection? I`m using utf8mb4 charset and utf8mb4_unicode_ci, but i cant set collation. Default collation is utf8mb4_general_ci I cant disable builtin "SET NAMES utf8mb4" and cant override in $dumpSettings['init_commands'], because the builtin commands come after the user commands.

If i add "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci" to 'init_commands' i get it: $dumpSettings['init_commands'] dump array (3) [ 0 => string (44) "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci" 1 => string (17) "SET NAMES utf8mb4" 2 => string (22) "SET TIME_ZONE='+00:00'" ]

sizov82 avatar Mar 29 '23 15:03 sizov82

As far as I can see, default-character-set is the dump setting you need and it's just a string variable passed directly into SET NAMES query. So you can specify there not only charset but the collation too. Could you try this approach?

$dump = new IMysqldump\Mysqldump('mysql:host=localhost;dbname=testdb', 'username', 'password', ['default-character-set' => 'utf8mb4 COLLATE utf8mb4_unicode_ci']);

phpony avatar Mar 29 '23 21:03 phpony

The first thing I tried to do was to do exactly that, but quickly realized that it was not possible because this array value ('default-character-set') is used elsewhere in the class and the "COLLATE" clause is invalid there.

For example this class code generates a commented Mysql command: "/*!40101 SET character_set_client = " . $this->dumpSettings['default-character-set'] . " */;"

sizov82 avatar Mar 30 '23 05:03 sizov82

Maybe we could create an additional option "default-character-collation" that can be sent to the connection string, appending it to SET NAMES. What do you think?

ifsnop avatar May 16 '23 16:05 ifsnop