diff options
author | Kevin Decherf <kevin@kdecherf.com> | 2019-05-11 20:07:38 +0200 |
---|---|---|
committer | Kevin Decherf <kevin@kdecherf.com> | 2019-05-19 23:37:49 +0200 |
commit | feb239ea1006685ab3862c988309a1a5a9659559 (patch) | |
tree | 034e26b367d06796a4f7888847cff76b1401ad7a /app/DoctrineMigrations | |
parent | de1162b91a205a98a3f8ed01bd80285793b18380 (diff) | |
download | wallabag-feb239ea1006685ab3862c988309a1a5a9659559.tar.gz wallabag-feb239ea1006685ab3862c988309a1a5a9659559.tar.zst wallabag-feb239ea1006685ab3862c988309a1a5a9659559.zip |
mysql: change collation of tag table
utf8mb4_unicode_ci considers that 'caché' is equal to 'cache' which
can lead to attaching incorrect tags to entries. This issue is due to
some unicode normalization done by MySQL.
utf8mb4_bin makes no unicode normalization, letting wallabag to consider
'cache' and 'caché' as two different tags.
We change the collation of the whole table as Doctrine does not support
setting a collation on a column for a specific platform (it tries to
apply utf8mb4_bin even for pgsql and sqlite).
Fixes #3302
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
Diffstat (limited to 'app/DoctrineMigrations')
-rw-r--r-- | app/DoctrineMigrations/Version20190511165128.php | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/app/DoctrineMigrations/Version20190511165128.php b/app/DoctrineMigrations/Version20190511165128.php new file mode 100644 index 00000000..7b6b1bec --- /dev/null +++ b/app/DoctrineMigrations/Version20190511165128.php | |||
@@ -0,0 +1,30 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Application\Migrations; | ||
6 | |||
7 | use Doctrine\DBAL\Schema\Schema; | ||
8 | use Wallabag\CoreBundle\Doctrine\WallabagMigration; | ||
9 | |||
10 | /** | ||
11 | * Convert tab label to utf8mb4_bin (MySQL only). | ||
12 | */ | ||
13 | final class Version20190511165128 extends WallabagMigration | ||
14 | { | ||
15 | public function up(Schema $schema): void | ||
16 | { | ||
17 | $this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL'); | ||
18 | |||
19 | $this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `label` `label` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;'); | ||
20 | $this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `slug` `slug` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;'); | ||
21 | } | ||
22 | |||
23 | public function down(Schema $schema): void | ||
24 | { | ||
25 | $this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL'); | ||
26 | |||
27 | $this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `slug` `slug` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
28 | $this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `label` `label` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
29 | } | ||
30 | } | ||