snippetsqlCritical
How to easily convert utf8 tables to utf8mb4 in MySQL 5.5
Viewed 0 times
tablesconvertutf8mysqlhowutf8mb4easily
Problem
I have a database which now needs to support 4 byte characters (Chinese). Luckily I already have MySQL 5.5 in production.
So I would just like to make all collations which are utf8_bin to utf8mb4_bin.
I believe there is no performance loss/gain with this change other than a bit of storage overhead.
So I would just like to make all collations which are utf8_bin to utf8mb4_bin.
I believe there is no performance loss/gain with this change other than a bit of storage overhead.
Solution
From my guide How to support full Unicode in MySQL databases, here are the queries you can run to update the charset and collation of a database, a table, or a column:
For each database:
For each table:
For each column:
(Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a
Note, however, that you cannot fully automate the conversion from
Section 10.1.11 of the MySQL 5.5 Reference Manual has some more information on this.
For each database:
ALTER DATABASE
database_name
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;For each table:
ALTER TABLE
table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;For each column:
ALTER TABLE
table_name
CHANGE column_name column_name
VARCHAR(191)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;(Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a
VARCHAR column.)Note, however, that you cannot fully automate the conversion from
utf8 to utf8mb4. As described in step 4 of the abovementioned guide, you’ll need to check the maximum length of columns and index keys, as the number you specify has a different meaning when utf8mb4 is used instead of utf8.Section 10.1.11 of the MySQL 5.5 Reference Manual has some more information on this.
Code Snippets
ALTER DATABASE
database_name
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;ALTER TABLE
table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;ALTER TABLE
table_name
CHANGE column_name column_name
VARCHAR(191)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;Context
StackExchange Database Administrators Q#8239, answer score: 173
Revisions (0)
No revisions yet.