Update Tagstore to work with MySQL, Blockstore to work with utf8mb4

Description

When I rebased https://github.com/open-craft/blockstore/pull/7 in preparation for merge, a couple tests broke (specifically, emoji tags weren't working and case-sensitive tags + case-insensitive search was not working). Here's what eventually I arrived at to fix them.

This PR:

  • Uses a migration to force Blockstore's MySQL database to use the `utf8mb4` encoding and `utf8mb4_unicode_ci` collation. These are generally recommended by everyone for new projects, and we already had some design decisions in place to be compatible with those. (However, without the fixes in this PR, it wasn't actually possible to use blockstore with `utf8mb4`)

  • Changes tagstore from being case-sensitive for tags to "preserve case but tags must be case-insensitively unique". I think that's better anyways, and it doesn't matter because on MySQL (and only MySQL) django doesn't allow you to do case-insensitive searches on a column that has case-sensitive collation.

Testing instructions:

1. Drop all tables in your blockstore database, or re-create it, or run all django app migrations to `zero`.
1. Check out this branch.
1. Run `make blockstore-shell` then `./manage.py migrate`
1. Run `make test` to confirm the tests pass.

Done

Assignee

Unassigned

Reporter

Open Source Pull Request Bot

Labels

None

Contributor Name

Braden MacDonald

Repo

edx/blockstore

Customer

Epic Link

None

OSCM Assignee

None

Platform Map Area (Levels 1 & 2)

None

Platform Map Area (Levels 3 & 4)

None

Blended Hour Utilization Percentage

None

edX Theme

None

edX Squad

None

Github Lines Added

99

Github Lines Deleted

25

Priority

Unset