CodeIgniter数据库字符集配置需同时设置数据库连接层和应用输出层:连接层在database.php中配置char_set为utf8mb4、dbcollat为utf8mb4_unicode_ci;数据库需建表指定CHARSET=utf8mb4;PHP文件保存为UTF-8无BOM,HTML加<meta charset="utf-8">,必要时设响应头。

数据库连接配置(application/config/database.php)
这是最核心的一环。需确保 $db['default'](或你使用的组名)中以下两项明确指定为 UTF-8 相关值:
-
'char_set' => 'utf8':告诉 CodeIgniter 使用 utf8 字符集与数据库通信(CI3 兼容,CI4 中推荐
utf8mb4) -
'dbcollat' => 'utf8_general_ci'(或更推荐
utf8mb4_unicode_ci):指定默认的排序规则,必须与char_set匹配
示例片段:
$db['default']['char_set'] = 'utf8mb4'; $db['default']['dbcollat'] = 'utf8mb4_unicode_ci';
数据库本身也要支持 UTF-8
CodeIgniter 的配置只是“告诉框架怎么连”,真正起作用还需底层数据库配合:
- MySQL/MariaDB:建表时显式声明
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci - my.cnf 配置文件中设置客户端、服务端默认字符集(如
[mysqld] default-character-set = utf8mb4) - SQL Server(sqlsrv 驱动):虽不直接依赖
char_set参数生效,但仍建议设为'char_set' => 'UTF-8',并确保数据库列使用NVARCHAR类型及 Unicode 排序规则
PHP 和网页响应层面同步
避免浏览器解析错乱,还需保障输出一致:
- PHP 文件本身保存为 UTF-8 无 BOM 格式(Notepad++ 或 VS Code 可检查)
- HTML 页面头部加:
<meta charset="utf-8"> - 必要时在控制器中统一设置响应头:
$this->output->set_content_type('text/html; charset=utf-8'); - php.ini 中确认
default_charset = "UTF-8"
验证是否生效的小技巧
写个简单测试方法,插入并查出含中文的数据,观察结果:
$this->db->insert('test', ['title' => '你好世界']);
$result = $this->db->select('title')->get('test')->row();
var_dump($result->title); // 应显示字符串"你好世界",而非乱码或问号


















