php+mysql,写入生僻字失败如何处理

我们在做类似古诗文类型网站或者应用时,往往会出现许多生僻字,如果采用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');

 

相关推荐