我们在做类似古诗文类型网站或者应用时,往往会出现许多生僻字,如果采用utf8数据库连接(写入失败)和utf8数据库编码(保存失败变为??),则在存入生僻字的时候往往会失败。处理方法是将编码改成支持扩展字符集的utf8mb4即可。
1、修改连接数据库时的字符集为utf8mb4
-- 使用pdo
$dsn = "mysql:host=dbhost;dbname=dbdbname;charset=utf8mb4";
$pdo = new PDO($dsn, $username, $password);
-- 使用mysqli
$mysqli = new mysqli("dbhost", "username", "password", "dbname");
$mysqli->set_charset("utf8mb4");
2、利用sql命令,确定创建的mysql数据库及编码为utf8mb4
-- 查看数据库的字符集,database_name改成自己的实际数据库名查询,下同 SHOW CREATE DATABASE database_name; -- 设置数据库的字符集为utf8mb4 ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; -- 查看表的字符集,table_name改成自己实际的表名查询,下同 SHOW CREATE TABLE table_name; -- 设置表的字符集为utf8mb4 ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
一般设置完上面2条,即可正确写入生僻字了;如果还不行,则可以继续参考下面内容。
3、在PHP文件和HTML文件中声明正确的utf8编码
-- html文件中
<meta charset="UTF-8">
-- php文件顶部
header('Content-Type: text/html; charset=UTF-8');
