CodeIgniter连接sqlsrv报Unable to set client connection character set: utf8如何解决
问题根源
该报错由SQL Server与MySQL的字符集命名规则差异导致:你使用sqlsrv驱动连接SQL Server数据库,但配置中填写的utf8、utf8_general_ci都是MySQL的字符集/排序规则命名,SQL Server无法识别。
解决方案
- 修改数据库配置的字符集参数
将数据库配置文件中的对应配置修改为:
'char_set' => 'UTF-8', 'dbcollat' => '',
如果配置不生效,可尝试将char_set替换为SQLSRV_ENC_UTF8。dbcollat可以留空,若需指定请填写SQL Server对应的排序规则(和实际数据库的排序规则保持一致,例如Chinese_PRC_CI_AS),不要使用MySQL的utf8_general_ci。
- 补充DSN配置(上一步未生效时使用)
你可以直接在DSN中指定连接参数和字符集,示例配置如下:
$db['default'] = array( 'DSN' => 'sqlsrv:Server=你的数据库地址;Database=你的数据库名;CharacterSet=UTF-8', 'hostname' => '', 'username' => '你的数据库用户名', 'password' => '你的数据库密码', 'database' => '', 'dbdriver' => 'sqlsrv', 'dbprefix' => '', 'pconnect' => false, 'db_debug' => false, 'cache_on' => false, 'cachedir' => '', 'char_set' => 'UTF-8', 'dbcollat' => '', 'swap_pre' => '', 'encrypt' => false, 'compress' => false, 'stricton' => false, 'failover' => array(), 'save_queries' => TRUE );
- 检查扩展版本
确认服务器安装的sqlsrv、pdo_sqlsrv扩展为最新稳定版,旧版本扩展存在UTF-8字符集兼容问题,可能触发相同报错。
内容的提问来源于stack exchange,提问作者user17146678
相关产品推荐
相关产品推荐

