web-dev-qa-db-ja.com

MySQLデータベースにアクセントを保存


フランス語のアクセントをデータベースに保存しようとしていますが、DBにあるように保存されていません。
たとえば、「é」は「é」として保存されます。
ファイルを「Unicode(utf-8)」に設定しようとしましたが、DB内のフィールドはDB自体と同様に「utf8_general_ci」です。
FirebugでAJAXを通じて投稿されたデータを見ると、アクセントが "é"として渡されているのがわかりますので、それは正しいです。

ありがとうございます。詳細が必要なことをお知らせください。

26
Ebpo

個人的に私はMySQL接続コードの後に追加することで同じ問題を解決しました:

mysql_set_charset("utf8");

またはmysqliの場合:

mysqli_set_charset($conn, "utf8");

またはmysqli OOP同等:

$conn->set_charset("utf8");

そして、次のコードを追加してmain php charsetを定義する必要がある場合があります。

mb_internal_encoding('UTF-8');

クライアントHTML側では、次のヘッダーデータを追加する必要があります。

<meta http-equiv="Content-type" content="text/html;charset=utf-8" />

JSON AJAX=結果(jQueryを使用するなど)を使用するには)を追加してヘッダーを定義する必要があります。

header("Content-type: application/json;charset=utf8");
json_encode(
     some_data
);

これでうまくいくはずです

51
Olivier Kaisin

最善の策は、データベース接続がUTF-8でエンコードされていないことです。通常、デフォルトではISO-8859-1です。

クエリを送信してみてください

SET NAMES utf8;

接続した後。

6
Pekka 웃

mysqli_set_charset($ conn、 "utf8");

3
Zhanka

pDOを使用する場合は、そのようにインスタンス化する必要があります。

new \PDO("mysql:Host=$Host;dbname=$schema", $username, $password, array(\PDO::MYSQL_ATTR_INIT_COMMAND =>  'SET NAMES utf8') );
3
A.Baudouin

UTF8を使用:

にメタを設定します

<meta http-equiv="Content-type" content="text/html;charset=utf-8" />   

MySQL DBに接続するときは、強制的にエンコードして、mysql設定で遊ぶ必要がないようにします。

$conn = mysql_connect('server', 'user', 'password') or die('Could not connect to mysql server.');
mysql_select_db('mydb') or die('Could not select database.');
mysql_set_charset('utf8',$conn); //THIS IS THE IMPORTANT PART

AJAXを使用する場合は、次のようにエンコードを設定します。

header('Content-type: text/html; charset=utf-8');
1
Etienne Dupuis

確認しました http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html

Unicodeを使用してサーバーと通信する必要があるクライアントアプリケーションは、それに応じてクライアントの文字セットを設定する必要があります。たとえば、SET NAMES 'utf8'ステートメントを発行します。 ucs2はクライアントの文字セットとして使用できません。つまり、SET NAMESまたはSET CHARACTER SETでは機能しません。 (セクション9.1.4「接続文字セットと照合順序」を参照してください。)

さらにそれに:

mysql-db(すべてutf-8)からphp経由でデータを取得しても、 '?'を取得する場合ブラウザの一部の特殊文字()については、次を試してください。

mysql_connect()およびmysql_select_db()の後に次の行を追加します。mysql_query( "SET NAMES utf8");

私のために働いた。私は最初にutf8_encodeを試しましたが、これはäüöéè...などでのみ機能し、キリル文字やその他の文字では機能しませんでした。

1
Shan Plourde

PHP(.net)は、MySQLステートメント内のデータをエスケープする機能が意図したとおりに機能しない可能性があるため、SET NAMES utf8などのクエリを使用して接続した後に文字セットを設定しないことをお勧めします。

PHPを使用している場合は、SET NAMES utf8を使用せず、適切な..._ set_charset()関数(またはメソッド)を使用してください。

0
Thomas

A)テーブルがそのような文字をエンコードできる文字エンコーディングを使用していることを確認する(UTF-8は最近の主流のエンコーディングである傾向がある)およびb)フォーム送信がデータベースに送信されていることを確認する同じ文字エンコーディング。これを行うには、HTML/PHP /その他のファイルをUTF-8として保存し、ブラウザにUTF-8エンコーディングを使用するよう指示するメタタグをヘッドに含めます。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

ああ、Cを忘れないでください。データベースに接続するときは、SET NAMES charset = utf8を実行して、実際に正しい文字セットを使用していることを確認してください(正しい構文ではない可能性があります。それはそうあるべきですが、それらの線に沿って行われます)

0
GordonM