mysqldump-php
mysqldump-php copied to clipboard
Not default connection collation
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'" ]
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']);
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'] . " */;"
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?