gpt4 book ai didi

mysql - 使用 ZF2 dbAdapter for mySQL 进行更新时出现 UTF-8 错误编码

转载 作者:行者123 更新时间:2023-11-29 18:43:38 25 4
gpt4 key购买 nike

当我尝试使用“tableGateway”对象更新记录时,出现异常:

Zend\Db\Adapter\Exception\InvalidQueryException
Statement could not be executed
(HY000 - 1300 - Invalid utf8 character string: 'C`\xC3`\xB3`digo')

我有以下表结构,其中包含 mySQL 中的数据:

CREATE TABLE `clientes` (
`Código` int,
`Nome` varchar(50),
`Descricao` varchar(150)
....
);

INSERT INTO `clientes` (`Código`, `Nome`, `Descricao`)
VALUES (1, 'Test Nome', 'Test Descricao');

数据库编码为'latin1',但数据库配置如图:

'mycnn'    => array(
'driver' => 'pdo',
'dsn' => 'mysql:dbname={$mydb};host={$myhost}',
'username' => '{$myuser}',
'password' => '{$mypassword}',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
)

正如您在上面的场景中看到的,我已经为“UTF-8”设置了驱动程序,列名“Código”有一个特殊字符,并且无法重命名该列。

我在模型中用于更新的语法是:

$set = array("Nome" => "Edited Test");
$where = array("Código" => 1);

$this->tableGateway->update($set, $where);

之后,ZF 解析 SQL 并抛出异常:

UPDATE "clientes" SET "Nome" = 'Edited Test' WHERE "C`\xC3`\xB3`digo" = 1

我还删除了 UTF-8 选项,因为目录是“latin1_swedish_ci”,但没有成功。

如果有人给我提示如何面对这个问题,我将不胜感激。

提前致谢。

最佳答案

确保您的数据库编码类型为 UTF-8

'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),

确保字段具有 utf8_general_ci

在你的布局 phtml 头部有

<meta charset='utf-8'>

已更新

正如您所说,您无法将编码更改为 utf-8,因此请使用 driver_options 使用以下命令之一

'SET NAMES \'latin1\'' or 'SET CHARACTER SET \'latin1\''

有关更多详细信息,请查看doc请!

当列名包含 latin1 字符时出现问题

只需将条件作为字符串而不是数组作为第二个参数传递到 TableGatewayupdate() 方法中。但您必须在 driver_options 中设置'SET NAMES\'UTF8\''

$id = 1;
$where = "Código = {$id}";

// Or use this way
$where = "Código = 1";

$this->tableGateway->update($set, $where);

关于mysql - 使用 ZF2 dbAdapter for mySQL 进行更新时出现 UTF-8 错误编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44764789/

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