本篇文章实战演示如何把一个使用 MySQL 的经典 Django 项目的数据库迁移到更省心的 PostgreSQL 上。
上周,我的 Manico 网站后台收到了一个网站崩溃的报告,这个崩溃是名叫「Yale」的用户通过「联系我」这个表单给我反馈 Manico 的问题,他在反馈中打了三个 emoji,然后点击了「发送」按钮…然后,我的网站就 500 了。
这是因为 MySQL 默认的 utf8 字符集并不支持存储 emoji 这样四个字节的字符,于是就会在数据保存的时候引发「Incorrect string value」的错误,进而导致网站 500 。
解决办法也很简单,把 MySQL 的字符集配置成 utf8mb4 就可以了,但是要去改旧数据库的表格、可能需要迁移旧数据…不太喜欢这种方式。
另外,不仅仅是 Manico 的网站用的是 Django + MySQL 的组合,本站 IMTX 也是,所以我在文章中从来就不能用 emoji(当然现在可以了