写在前面,昨晚睡前突然意识到一件事儿,以前看的那些书已经在潜移默化间改变了我的思维和言行。比如现在我思考一件事儿,会在脑海中自动将从前书中的一些经验映射到现实,像是我曾经经历过一样。在与人谈话时它们的影响最明显,”腹有诗书气自华”大概就是这种感觉。
utf8和utf8mb4
utf8编码最大字符长度为3字节,三个字节的UTF-8最大能编码的 Unicode字符是0xffff,也就是Unicode中的基本多文种平面(BMP)。也就是说:任何不在基本多文本平面的Unicode字符,都无法使用Mysql的utf8字符集存储。包括Emoji表情,和很多不常用的汉字,以及任何新增的 Unicode字符等等。
mysql最早只支持utf8,utf8mb4是在Mysql-5.5.3版本后引入的,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。utf8mb4是utf8的超集,因此将字符编码从utf8变更为utf8mb4对原先的数据没有任何影响。
另外关于utf8和utf8mb4的排序规则问题,参考mysql中utf8和utf8mb4的区别-癫Point的解释:
utf8_unicode_ci比较准确,utf8_general_ci速度比较快,通常情况下utf8_general_ci的准确性就够我们用的了。如果是utf8mb4那么对应的就是utf8mb4_general_ci、utf8mb4_unicode_ci。
批量修改数据库中所有字段的编码
开始的时候我是一个个手动改的,但是改了两个表之后,发现后面居然还有几十张表等着我,不由瑟瑟发抖…
直接使用下面的sql可以生成alert语句,
1 | SELECT |
执行上面语句后的结果,直接复制并执行,或者导出为sql文件然后执行即可。