我试图将utf8
转换为utf8mb4
以获取php网站,不幸的是,我在localhost上取得了成功但在测试服务器上失败了。
本地主机:
测试服务器:
它们连接到同一个mysql数据库(编码:utf8mb4,collation:utf8mb4_unicode_ci)。
数据表:(编码:utf8,collation:utf8_unicode_ci)
一些数据表:(编码:utf8mb4,整理:utf8mb4_unicode_ci)
带有CodeIgniter框架当前配置的php网站:
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
使用此配置,一切正常。当我将配置更改为:
时$db['default']['char_set'] = 'utf8mb4';
$db['default']['dbcollat'] = 'utf8mb4_general_ci';
我的localhost服务器上的一切正常,但测试服务器没有。
在测试服务器上,从DB获取数据的页面文本显示???
。我尝试从页面插入带表情符号的评论,评论文本没问题。
我使用mysql客户端Sequel Pro连接数据库,我发现刚刚插入的注释是不正确的编码(windows-1252)。 PHP将windows-1252文本保存到utf8数据库。
T_T,请帮帮我。是否需要一些PHP扩展?答案 0 :(得分:0)
我已经解决了。
在测试服务器上,php使用mysql扩展而没有mysqlnd,因此charset依赖于/usr/share/mysql/charsets/
设置。如果错过utf8mb4
定义,则mysql_set_charset
功能将失败:2019: Can't initialize character set utf8mb4 (path: /usr/share/mysql/charsets/)
。
只需使用mysql_query('SET NAMES utf8mb4')
。