当前位置: 首页 > 知识库问答 >
问题:

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

楚意
2023-03-14

我试图转换utf8utf8mb4为一个PHP网站,不幸的是,我在localhost成功,但在测试服务器上失败了。

本地主机:

  • php/5.3.29(brew安装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';

使用此配置,一切都正常。当我将配置更改为:

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

一切都可以在我的localhost服务器,但不是测试服务器。

在测试服务器上,从数据库获取数据的页面文本显示???.我试着从页面插入一个带有表情符号的评论,评论文本是可以的。

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

请帮帮我。是否需要一些php扩展?

共有1个答案

熊烨
2023-03-14

我已经解决了。

在测试服务器上,php使用mysql扩展而不使用mysqlnd,因此字符集取决于/usr/share/mysql/charsets/设置。如果未定义utf8mb4,则mysql\u set\u charset功能将失败:2019:无法初始化字符集utf8mb4(路径:/usr/share/mysql/charset/)

只需使用mysql_query('SET NAMES utf8mb4')

 类似资料:
  • 这段代码导出sql数据到csv文件,数据是出来了,显示在网页上,不保存成csv文件,请教一下什么原因?

  • 当我启动这个代码时,你通常认为它会在文本文件中输入一个100,但我不知道为什么它会像字符一样输入一个“d”。有人知道如何修复吗?一个方法应该输入一个数据,一个应该输入那个数据,一个应该保存那个数据。

  • 为什么我的值不能进入数据库? 如果需要更多的代码,请告诉我。 警告: 查询连接中的异常。php第713行:SQLSTATE[23000]:完整性约束冲突:1048列“name”不能为空(SQL:insert-into(,,,,)值(,,2016-06-19 21:44:05,2016-06-19 21:44:05)) 控制器: HTML页面:

  • 问题内容: 即时通讯试图将我的用户使用网络表单输入的长文本(约2500个字符)保存到我的数据库中,并使用php传递给服务器。 当我在phpmyadmin中查看时,文本会变大。如何配置表格以获得完整的文本?这是我的表配置: 看一看具有3000个字符限制的字段 内容 ,但是文本总是以 690个字符为准 。谢谢你的帮助! 编辑 :我发现了问题,但我不知道如何解决。查询总是以相同的char形式获取农作物,

  • 我正在尝试将我们的数据库从latin1转换为UTF-8。不幸的是,我不能做一个大规模的单一切换,因为应用程序需要保持在线,我们有700GB的数据库要转换。 因此,我试图利用mysql的一些技巧,将表转换为UTF-8,而不是数据。我希望数据能够被实时读取、转换和替换。(如果愿意,可以进行JIT转换) 我们的php应用程序目前使用所有默认值,所以它使用latin1字符集连接到mysql,并丢弃在lat

  • 我有UTF-8源数据,我必须创建在Windows 1252字符编码编码的CSV文件。 我尝试了经典功能,但效果不佳。它必须支持转换后的塞尔维亚字符: "čćžšđ" 。 此外,我还尝试转换为CP1252、ISO-8859-1、ISO-8859-2,功能包括:mb_convert_编码、iconv和iconv_set_编码。 有人知道该试试什么吗?