【发布时间】:2017-06-26 16:56:57
【问题描述】:
当我尝试使用“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”但没有成功。
如果有人能给我提示如何面对这个问题,我将不胜感激。
提前致谢。
【问题讨论】:
-
您好@Cesar,您能强调一下您遇到了异常吗?略读您的问题时不清楚。
-
希望您可以转向 UTF8 而不是远离。从上到下采用 UTF8 可以解决很多编码问题。
-
我尝试删除 UTF-8 并转换字符串
utf8_decode("Código"),但列名变为 'C`ó`digo',特殊字符之间有 2 个反引号。
标签: mysql pdo encoding utf-8 zend-framework2