codeigniter数据库中文乱码本质是客户端(ci)、服务端(mysql)和连接层三者编码不一致;需统一设为utf8:1.配置database.php中char_set='utf8'、dbcollat='utf8_general_ci';2.修改my.cnf设character-set-server=utf8;3.建库建表时显式声明character set utf8;4.用set names utf8及查询@@character_set_*验证三值均为utf8。

CodeIgniter 数据库配置中出现中文乱码,本质是客户端(CI)、服务端(MySQL)和连接层三者编码不一致导致的。只要统一为 UTF-8 并确保各环节生效,问题就能彻底解决。
1. 确保 CodeIgniter 数据库配置启用 UTF-8
打开 application/config/database.php,找到默认数据库配置项,确认以下两项已明确设置:
- $db['default']['char_set'] = 'utf8';
- $db['default']['dbcollat'] = 'utf8_general_ci';
注意:CI 3.x 中 char_set 必须设为 'utf8'(不是 'utf8mb4'),否则连接初始化时可能忽略编码声明;若需支持 emoji,需配合 MySQL 服务端升级为 utf8mb4 并调整对应配置。
2. 验证 MySQL 服务端默认字符集
登录 MySQL 命令行,执行:
SHOW VARIABLES LIKE 'character_set%';<br>SHOW VARIABLES LIKE 'collation%';
关键字段应为:
-
character_set_server →
utf8或utf8mb4 -
collation_server →
utf8_general_ci或utf8mb4_unicode_ci
若不匹配,需修改 MySQL 配置文件(如 /etc/my.cnf 或 my.ini),在 [mysqld] 段下添加:
[mysqld]<br>character-set-server = utf8<br>collation-server = utf8_general_ci
然后重启 MySQL 服务。
3. 创建数据库与表时显式指定编码
新建数据库务必使用:
CREATE DATABASE myapp CHARACTER SET utf8 COLLATE utf8_general_ci;
建表语句中也要声明,例如:
CREATE TABLE news (<br> id INT PRIMARY KEY AUTO_INCREMENT,<br> title VARCHAR(255) NOT NULL,<br> content TEXT<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
仅依赖数据库默认值不可靠,显式声明可避免迁移或脚本执行时遗漏。
4. 检查连接建立后的实时编码
可在控制器中临时加一行验证连接是否真正用了 UTF-8:
$this->db->query("SET NAMES utf8"); // 强制重设连接编码<br>echo $this->db->query("SELECT @@character_set_client, @@character_set_connection, @@character_set_results")->row();
三个值都应返回 utf8。如果仍为 latin1,说明配置未加载成功,需回溯检查 database.php 是否被缓存、是否有多个环境配置覆盖等。











