gpt4 book ai didi

php - 为什么 PHP 将 windows-1252 文本保存到 utf8mb4 数据库?

转载 作者:行者123 更新时间:2023-11-29 21:42:02 25 4
gpt4 key购买 nike

我试图将 PHP 网站的 utf8 转换为 utf8mb4,不幸的是,我在本地主机上成功,但在测试服务器上失败。

本地主机:

  • php/5.3.29(brew install php53) 或 PHP/5.6.8(xampp)
  • Apache /2.4.16

测试服务器:

  • PHP/5.6.14
  • nginx/1.6.0

它们连接到同一个 mysql 数据库(编码:utf8mb4,排序规则:utf8mb4_unicode_ci)。
数据表:(编码:utf8,排序规则:utf8_unicode_ci)
一些数据表:(编码:utf8mb4,排序规则:utf8mb4_unicode_ci)

带有 CodeIgniter 的 php 网站框架当前配置:

$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';

有了这个配置,一切就OK了。当我将配置更改为:

$db['default']['char_set'] = 'utf8mb4';
$db['default']['dbcollat'] = 'utf8mb4_general_ci';

我的本​​地主机服务器上一切正常,但测试服务器上不行。

在测试服务器上,从数据库获取数据的页面文本显示???。我尝试从页面插入带有表情符号的评论,评论文本没问题。

我使用mysql客户端Sequel Pro连接数据库,我发现刚才插入的注释编码不正确(windows-1252)。 PHP 将 windows-1252 文本保存到 utf8 数据库。

T_T,请帮帮我。需要一些 php 扩展吗?

最佳答案

我已经解决了。

在测试服务器上,php使用mysql扩展而没有mysqlnd,因此字符集取决于/usr/share/mysql/charsets/设置。如果错过了 utf8mb4 定义,mysql_set_charset 函数将会失败:2019: Can't初始化字符集 utf8mb4 (path:/usr/share/mysql/charsets/)

只需使用 mysql_query('SET NAMES utf8mb4') 即可。

关于php - 为什么 PHP 将 windows-1252 文本保存到 utf8mb4 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34411760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com