MySQL8新特性-默认字符集变更
我们知道在MySQL8.0版本之前,那么默认的字符集为latin-1
,而UTF8字符集指向的是utf8mb3
,不知道大家在工作中是否被它坑过,名字就非常具有误导性,在面对一些生僻字、表情之类的内容,进行存储时会提示SQL异常。
SQLException: Incorrect string value: ‘\xF0\xA1\x8B\xBE\xE5\xA2…’ for column ‘name’
utfmb3
后面的mb其实指的是 most bytes
,也就是最多占用几个字节。而mysql中字符串长度算的是字符数而不是字节数,那么对于char类型来说,需要保留足够的空间。我们用的utf8字符集,需要保留的长度就是 utf8 最长字符长度乘以字符串长度,所以这里理所当然的限制了 utf8 最大长度为 3。如果我们需要更好的一个兼容性,应该使用utf8mb4而不是utf8,对于char类型可能空间占用会多消耗一些, Mysql 官方建议是使用 VARCHAR 替代 CHAR。
在MySQL8.0开始,数据库的默认编码从latin1
就改成了utf8mb4
,避免了我们可能忘记修改而带来的问题,我们基本上不用再为字符集而操心了。