如上图所示,有些特殊的汉字没有办法保存到mysql数据库里,就比如这个土字旁的劳,因为这些汉字是四个字节的。而mysql的utf8编码只能保存3个字节。硬要保存就会出错。于是我仔细百度了一下。原来是mysql本身的设计就有缺陷。还好mysql推出了一个解决方案,就是用utf8mb4编码。
具体步骤1:首先更改mysql连接语句,从utf8到utf8mb4
如果数据连接用的是PDO,那就打开 /yzmphp/core/class/db_pdo.class.php 找到47行,把utf8改为utf8mb4 self::$link -> exec("SET names utf8mb4, sql_mode=''");
具体步骤2:其次我们要修改数据库的字符编码及字段的排序方法,在这里我只是需要用到 article表 的 content字段,所以我就单独修改这个字段的编码及排序方法。
#用后台SQL命令行就行。 ALTER TABLE `article` MODIFY COLUMN `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
完成上面两个步骤后就可以正常显示出4字节汉字了。这两个步骤缺一不可。如果没做步骤1,根本就没办法保存数据到MYSQL数据库里。那没做步骤2的话,虽然可以把数据保存进去,但是,已经保存好的四字节汉字就会显示成问号,不会正确显示出来。