2016-04-19 24 views
0

My SchemaはLatin1のデフォルト照合に設定されています。挿入beeingては何MySQLプロシージャの変更文字セット

$result = $conn->sql('CALL _TESTE("á é ô ã ç")'); 

私_TESTE手順

CREATE DEFINER=`root`@`%` PROCEDURE `_TESTE`(IN vTarNom VARCHAR(255)) 
BEGIN 
    INSERT INTO _TEMP VALUES (NULL, vTarNom); 
END 

áéA'ãç

私のPHPコード

I w私が送信したものアリは正確に保存するには:A〜E OのAのCの

任意の助けを?

編集:私は「AのéôAがC」を送信するワークベンチからプロシージャを呼び出す場合は、変換PHPによって呼び出されたときだけで、正しく挿入します。

+1

私は非常にあなたの照合に[utf8mb4](https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html)への切り替えをお勧めします。 – Machavity

+0

の 'SHOW CREATE PROCEDURE _TESTE \ G'を確実にサポートします。プロシージャがlatin1を使用していることがわかります。 –

+0

手順はlatin1です。プロシージャ、テーブル、またはスキーマに問題がないと思います。なぜなら、私がワークベンチ内のプロシージャを呼び出すと、latin1文字が正しく挿入されるからです。 –

答えて

1

あなたはLatin1のデータベースにUTF-8を挿入しています。ここでの簡単な修正は、UTF-8文字列をLatin1に変換することですが、データベースUTF-8を作成することをお勧めします。

Latin1のは、ほとんどの言語の罰金かもしれないが、それは頻繁に人々によって使用されている他のシンボルを処理することはできません。

+1

関連http://stackoverflow.com/questions/2708958/differences-between-utf8-and-latin1 – Machavity

+0

@tadman、 - 私PHPからlatin1の文字「A EのôAのC」を送信し、何とか、それが到着しているUTF8その手順でプロシージャをワークベンチ(例えば)から直接呼び出して 'áéôç'を渡すと、完全に挿入されます。 –

+1

ENTIREプロセスを通じて同じ文字セットを維持する必要があります。コード - > db接続 - >テーブル - >フィールド。いずれかのステージで異なる文字セットがある場合は、テキスト全体が同じ文字セットを使用するか、または「境界」に適切な文字セット変換ロジックがあります。 –

関連する問題