のためにMySQLのZF2 dbAdapterを使用したとき、私は「tableGateway」オブジェクトにレコードを更新しようとしたとき、私は例外を取得しています:UTF-8バート・エンコーディング更新
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を削除しましたカタログは "latin1_swedish_ci"なので、成功しません。
私はこの問題にどのように対処するかについてのヒントをいただける方に感謝します。
ありがとうございます。
こんにちは@Cesar、例外が発生していることを強調できますか?あなたの質問を隠すときは明確ではありません。 – Chic
うまくいけば、あなたはUTF8に向かうことができます。 UTF8を上から下に向けると、多くのエンコーディングの問題を解決できます。 – tadman
私はUTF-8を削除しようとしましたが、文字列 'utf8_decode("Código ")'を変換しますが、列名は 'C \ 'ó\' digo'になります。 –