彻底解决方法:1.数据库创建时指定字符集utf8mb4 COLLATE utf8mb4_general_ci;2.MySQL配置文件my.cnf中设置default-character-set=utf8mb4;3.网页
中添加;4.PHP连接数据库时设置mysqli_set_charset($conn,'utf8mb4');5.数据库表和字段统一设为utf8mb4;这样从数据库到网页全程UTF-8编码,就不会乱码了。第一步:检查和设置MySQL数据库编码
首先登录MySQL,执行SHOW VARIABLES LIKE 'character_set%'; 查看当前字符集。如果不是utf8,修改my.cnf文件,在[mysqld]下添加:character-set-server=utf8,collation-server=utf8_general_ci。然后重启MySQL服务。创建数据库时用CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci; 建表时ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
网页乱码解决:HTML和PHP设置
在HTML文件的头部加上<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />。PHP文件中,输出前加header('Content-Type:text/html;charset=utf-8'); 数据库连接后立即mysqli_query($conn,"SET NAMES utf8"); 插入数据用utf8编码的文件。
常见乱码原因及对应解决
1.数据库是gbk,网页utf8:转换数据库为utf8。2.PHP页面保存为ansi:用notepad++转为utf8无bom。3.数据库连接没设names utf8:在connect.php加mysql_query("set names utf8");4.Apache没设编码:在httpd.conf加AddDefaultCharset utf-8。一步步检查,对症下药。
彻底统一UTF8编码教程
1.修改/etc/my.cnf:[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci。2.重启mysql,重连后show variables like '%char%';确认。3.所有表执行ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;4.网页meta charset=utf-8,php header Content-Type text/html charset=utf8。
WordPress乱码解决
wp-config.php中加define('DB_CHARSET', 'utf8'); define('DB_COLLATE', 'utf8_general_ci'); 数据库统一utf8,functions.php加header('Content-Type: text/html; charset=UTF-8'); wp_dbdel.php清缓存。
测试方法和预防
插入中文“测试123”到数据库,网页显示正常即ok。预防:新项目从头统一utf8mb4,避免emoji乱码。备份前导出sql检查编码。
FAQ
Q: 为什么数据库正常但网页乱码?
A: 网页没设置charset=utf-8,或php没header,或连接没set names utf8。
Q: 怎么批量转换表编码?
A: 用mysql命令行脚本for table in $(mysql -u root -p -e "show tables" dbname); do mysql -u root -p -e "ALTER TABLE $table CONVERT TO CHARACTER SET utf8" dbname; done
Q: PHP用PDO怎么设置?
A: $pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", $user, $pass);
Q: Windows下phpmyadmin乱码?
A: config.inc.php加$cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; $i=0; $i++; $cfg['Servers'][$i]['port'] = '';$cfg['Servers'][$i]['socket'] = '';$cfg['Servers'][$i]['connect_type'] = 'tcp';$cfg['Servers'][$i]['extension'] = 'mysqli';$cfg['Servers'][$i]['auth_type'] = 'config';$cfg['Servers'][$i]['controluser'] = 'pma';$cfg['Servers'][$i]['controlpass'] = '';$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';$cfg['Servers'][$i]['relation'] = 'pma_relation';$cfg['Servers'][$i]['table_info'] = 'pma_table_info';$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';$cfg['Servers'][$i]['column_info'] = 'pma_column_info';$cfg['Servers'][$i]['history'] = 'pma_history';$cfg['Servers'][$i]['table_uiprefs'] = 'pma_table_uiprefs';$cfg['Servers'][$i]['tracking'] = 'pma_tracking';$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';$cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';$cfg['UploadDir'] = '';$cfg['SaveDir'] = '';