PDO 在 UTF-8 字符处截断字符串[重复]

2024-04-23

我使用的是 PHP 5.5,当我尝试在 MySQL 数据库中插入 UTF-8 字符时,PDO 在第一个非 ASCII 字符处将其截断。

我已将连接设置为:

(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASS, array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING))

我已经尝试过每个人都发布的 SET NAMES,但这也不起作用,因为问题不在 MySQL 方面。

当我通过 phpMyAdmin 并直接从 MySQL 控制台进行插入时,它起作用了! 当我用 PDO 选择重音字符串时,它起作用了!

问题只出在INSERT and UPDATE专门使用PDO!

这是该表的 SQL。全部采用 UTF-8,但也许有人知道设置和 PDO 之间存在冲突

CREATE TABLE IF NOT EXISTS `mytable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_lang` int(11) NOT NULL DEFAULT '2',
  `id_tgroup_cat` int(11) NOT NULL,
  `fieldfor` int(11) NOT NULL,
  `colors` varchar(100) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ;

我已经尝试将文本设置为 varchar 字段,但这并没有改变任何内容。

PHP 中的实际插入:

    $query = $this->db->prepare("UPDATE mytable
                                    SET text = ?,
                                        colors = ?
                                    WHERE id = ?");
    $query->execute(array($text, $colors, $id));

Where $text = "référence"(仅将字母 R 保存在数据库中,但没有重音符号,它会保存所有内容)并且 $colors 是用于测试目的的空字符串,$id is 2.


这是我的关键线索:

其中 $text = "référence" (仅将字母 R 保存在数据库中,但 没有重音它会保存所有内容)并且 $colors 是一个空字符串 用于测试目的,$id 为 2。

听起来这是一个UTF-8编码问题。虽然数据库是 UTF-8,但从代码到数据库的整个链(包括连接)都应该是 UTF-8 干净的。

究竟如何$this->db->prepare与 PHP 连接 MySQL 相关吗?从您显示的代码来看有点不清楚。但根据您所显示的内容,也许像这样调整您的查询会有所帮助:

$query = $this->db->prepare("SET collation_connection = utf8_bin;
                             SET NAMES utf8;
                             UPDATE mytable
                                SET text = ?,
                                    colors = ?
                                WHERE id = ?");

或者也许是这样的:

$this->db->exec("SET collation_connection = utf8_bin; SET NAMES utf8;");
$query = $this->db->prepare("UPDATE mytable
                                SET text = ?,
                                    colors = ?
                                WHERE id = ?");

请注意我强行添加的SET collation_connection = utf8_bin;SET NAMES utf8;

一般来说,您需要确保从连接到数据库再到表的整个链都是 UTF8 干净的。我有一个详细的答案这里有一个类似的问题 https://stackoverflow.com/questions/20624445/characters-like-not-displaying-correctly-from-mysql/20624493#20624493.

但就你的情况而言,请检查实际的 MySQL 服务器my.cnf文件。以下代码将整个链设置为 UTF-8:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

EDIT:由于原始海报表明数据来自 HTML5 表单,因此我还认为检查实际 HTML5 文件本身的 BOM(字节顺序标记)也会有所帮助。应将其设置为 UTF8。更多详情请参阅BOM 是什么在这里 https://stackoverflow.com/questions/2223882/whats-different-between-utf-8-and-utf-8-without-bom。具体来说,马丁代码接受的答案解释道:

UTF-8 BOM 是一个字节序列 (EF BB BF),允许阅读器 将文件识别为 UTF-8 文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PDO 在 UTF-8 字符处截断字符串[重复] 的相关文章

  • 如何使用 zend paginate 而不加载数据库的所有结果

    所以我认为 zend paginate 工作的方式是 paginator Zend Paginator factory results paginator gt setItemCountPerPage itemCount paginator
  • Jquery .ajax method =“post”但$_POST为空

    ajax method post url save php data id 453 action test beforeSend function complete function success function html mydiv
  • 数组中的唯一条目

    我有以下内容将前 10 个 URL 存储到会话中 function curPageURL pageURL http if SERVER HTTPS on pageURL s pageURL if SERVER SERVER PORT 80
  • 从中间部分匹配完成建议elasticsearch

    我有一个名为搜索建议具有以下 search suggest type completion analyzer simple payloads true preserve separators false preserve position
  • Sqoop mysql错误-通信链路故障

    尝试运行以下命令 sqoop import connect jdbc mysql 3306 home credit risk table bureau target dir home sqoop username root password
  • 如何调试 MySQL 上的锁等待超时?

    在我的生产错误日志中 我偶尔会看到 SQLSTATE HY000 一般错误 1205 超过锁等待超时 尝试 重新开始交易 我知道当时哪个查询正在尝试访问数据库 但是有没有办法找出哪个查询在那个精确时刻拥有锁定 暴露这一点的是这个词交易 从该
  • 推进并离开加入

    在教义中我可以 q Doctrine Query create gt from One o gt where t text aaa gt andWhere h text bbb gt leftJoin o Two t gt leftJoin
  • stdClass 类的对象无法转换为字符串

    我现在在使用 PHP 时遇到问题 收到此错误 Object of class stdClass could not be converted to string当我在我的网站中运行这部分代码时发生错误 function myaccount
  • 如何在 PHP 中复制此 C# 哈希? (toByteArray()、ComputeHash())

    我正在尝试复制以下代码PHP 这是我必须与之交互的 API 的示例代码 API 和示例代码位于C 我的应用程序在PHP 5 3 我不是 C 开发人员 因此在执行此操作时遇到困难 C Code I am trying to replicate
  • PHP 扩展 mysqli 和 nd_mysqli 之间的区别[重复]

    这个问题在这里已经有答案了 Mysqli 准备好的语句 如下所示 在以下情况下会抛出以下错误 get result 叫做 stmt connection gt prepare select column from table where i
  • 如何设置 MySQL Workbench 自动断开与服务器的连接?

    有没有办法设置Workbench在空闲时自动与服务器断开连接 命令行 mysql 客户端在空闲时断开连接 然后在运行查询时重新连接 我也希望 Workbench 自动断开连接 我无法修改服务器的超时设置 但命令行客户端可以按照当前服务器设置
  • Azure 上的 Laravel 应用程序:用户“azure”@“localhost”的访问被拒绝

    我正在将 Laravel 应用程序部署到 Azure Web 应用程序 Mysql 到目前为止我执行了以下步骤 1 在应用程序中激活Mysql 2 连接到 BitBucket 存储库并确保代码已同步 3 创建 env文件并设置数据库变量如下
  • 解析日期字符串

    我在 post 变量中有这个字符串 03 21 2011 我需要通过php解析它并将其转换成这种格式 2011 03 21 我正在使用 php 我需要这种格式 以便我可以运行此查询 SELECT prospect as Prospect c
  • @mysql_connect 和 mysql_connect

    我使用 PHP 连接到数据库没有问题 但是在我测试过的一些脚本中 我发现连接命令存在细微差别 有什么区别 mysql connect and mysql connect 我从未使用过 编写我自己的脚本时使用的符号 所以只是想知道它是否有用
  • PHP/Web 脚本保护

    我想用 PHP 和 javascript 编写一个脚本 并以某种方式保护我的源代码 以便我可以出售我的脚本 我正在寻找如何保护我的脚本的想法 如果我将其出售给某人 我如何阻止该人将其作为他们的产品重新分发 我知道有ZEND和ionCube
  • 在单个测试中断言多个条件,还是分成多个测试? [复制]

    这个问题在这里已经有答案了 如果您正在测试如下所示的计数函数 那么在一个函数中测试该函数的多项内容与为每个测试使用一个测试函数相比 是否被认为是 正确 或 错误 function testGetKeywordCount tester thi
  • Jquery UI:日期选择器。如何通过 $_GET 在日期选择器中设置日期

    我找不到如何设置 GET 变量来手动设置日期选择器中的日期 http jqueryui com demos datepicker http jqueryui com demos datepicker 例子 那可能吗 Thanks 在此使用
  • 在 Woocommerce 中以编程方式创建新产品属性

    如何通过插件为 WooCommerce 创建属性 我只找到 wp set object terms object id terms taxonomy append From 这个堆栈问题 https stackoverflow com qu
  • 在 CakePHP 中访问 Configuration::read 控制器

    我的 CakePHP 应用程序有一个单独的配置文件 该文件加载在 bootstrap php 中 我的问题是 如何访问控制器中的配置变量 IE 如何在控制器中执行Configure read variable 函数 谢谢 在我的自定义配置文
  • 使用哈希检查具有 $_POST 值的页面是否已刷新

    当将表单发布到同一个PHP页面时 正确的方法是什么来查找页面是否被意外刷新而不是再次提交 这是我现在正在使用的 tmp implode POST myHash md5 tmp if isset SESSION myHash SESSION

随机推荐

  • 根据日期范围增强文档

    我能够根据日期过滤文档 但我真正需要的是提高某些日期范围 以下查询返回结果 queryType full search priority High 50 Normal 10 AND type one 1 two 10 filter type
  • DebugDiag 在 .NET 4 下不显示 .NET 堆栈信息

    感觉这个问题可能有一个简单的答案 但我一直找不到 所讨论的场景是 C NET 控制台应用程序 我通常使用 DebugDiag 1 2 来检查来自我们遇到的挂起的 dmp 文件 通常是线程锁定问题 它们是使用 DebugDiag 的 创建完整
  • ORB 演示代码出现 cv2.error 错误:来自 OpenCV 代码的未知 C++ 异常

    ORB 演示代码位于https opencv python tutroals readthedocs io en latest py tutorials py feature2d py orb py orb html https openc
  • 为什么会收到 Net::HTTP“请求路径为空”错误?

    我正在使用 Net HTTP 发出 HTTP 请求 我收到错误 HTTP 请求路径为空 但我强烈地感觉到事实并非如此 代码如下 REQUEST IP localhost REQUEST PORT 8081 REQUEST PATH mywe
  • 如何在 Linq 中执行 SQL Like %?

    我有一个 SQL 过程 我试图将其转换为 Linq SELECT O Id O Name as Organization FROM Organizations O JOIN OrganizationsHierarchy OH ON O Id
  • 将数据库从 genymotion 模拟器拉到本地磁盘

    我在开发中使用 genymotion 当我创建数据库时 我在 genymotion 模拟器的 DDMS 文件夹中看不到它 在 google 上搜索时 我可以在 adb shell 上看到数据库 但不知道如何将数据库拉到本地磁盘以查看数据 有
  • 如何在php中每隔几秒使用打印语句和图像的功能刷新div

    我正在尝试构建一个主要使用 PHP 的浏览器纸牌游戏 也许还添加了一些其他有用的语言 以测试和扩展我的 PHP 知识 以及我一直想做的东西 但我读过并尝试实施的每个在线解决方案都不起作用 我不知道为什么 我有这样的逻辑 find game
  • 对于 Android 蓝牙,EXTRA_PREVIOUS_SCAN_MODE 始终返回错误

    当设备的蓝牙扫描模式更改 即可发现 不可发现 时 我使用以下代码将对象返回到 Cordova cordova getActivity getApplicationContext registerReceiver new BroadcastR
  • 如何使用 flash.filesystem.FileStream [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Will 如何使用flash filesystem FileStream FileStream as文件在哪里 班上flash files
  • 如何为我的单元测试创​​建 HttpContext?

    我正在努力模拟所需的HttpContext对于我的单元测试 我已经从我的 Mvc 控制器中抽象出了会话的控制SessionManager接口并用一个名为的类实现它CookieSessionManager 早期发展阶段 CookieSessi
  • 错误“无法复制文件,因为它正在被另一个进程使用

    我使用 C 语言使用 Windows 窗体应用程序 我有很多窗体 当我想从一个窗体遍历到另一个窗体时 我使用this Hide 当我使用此方法时 我收到显示的错误 我知道解决方案是使用 Windows 任务管理器结束进程 但问题是有什么方法
  • “忙等待”与“睡眠”的权衡是什么?

    这是我之前问题的延伸 unix linux 套接字中的阻塞模式如何工作 https stackoverflow com questions 1107391 how does blocking mode in unix linux socke
  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • GetTokenInformation、TOKEN_OWNER 和 LookupAccountSidA

    我正在尝试使用这些功能来获取运行该进程的用户名 这是代码 include
  • 是否可以在GPU中实现Huffman解码?

    我们有一个用霍夫曼编码编码的数据库 这里的目的是将其及其关联的解码器复制到 GPU 上 然后在 GPU 上对数据库进行解码 并在解码后的数据库上执行操作 而无需将其复制回 CPU 上 我还远远不是霍夫曼专家 但我所知道的少数人表明 它似乎是
  • 如何在基于eclipse的Spring项目中添加bean配置文件?

    我从头开始处理 Spring 项目 当我尝试添加新的 Spring bean 配置文件时 我只是在那里看不到它 项目结构和选择向导如下 Figure 选择向导中没有 弹簧 部分 Figure project structure 如何在项目中
  • Scala 中的类型参数化

    所以我现在正在学习 Scala 我正在尝试创建一个向量空间为 3 x y z 坐标 的抽象向量类 我正在尝试将其中两个向量与以下代码相加 package math class Vector3 T ax T ay T az T def x a
  • 学习 CIL [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 EC2 实例创建中使用“无需密钥对继续”?

    我对 AWS 比较陌生 正在探索不同的可用选项 创建实例时 如果选择 在没有密钥对的情况下继续 我们将无法连接到该实例 文档中还有一条说明 说明不应选择此选项 那么这个选项的主要用途是什么呢 我们应该在哪些场景下使用它 选项Proceed
  • PDO 在 UTF-8 字符处截断字符串[重复]

    这个问题在这里已经有答案了 我使用的是 PHP 5 5 当我尝试在 MySQL 数据库中插入 UTF 8 字符时 PDO 在第一个非 ASCII 字符处将其截断 我已将连接设置为 DB TYPE host DB HOST dbname DB