0

私は、世界中の場所の「geoanems」データベースを使用する簡単な Web サイトを構築しています。Mysql、PHP、および CodeIgniter を使用していますが、UTF8 の地名に問題があります。DB をインポートしましたが、すべてが UTF-8 でセットアップされています。

ただし、ブラウザで名前を正しく取得できるかどうかを確認するために簡単なテストを実行していますが、いたるところに疑問符が表示されます。MySQL は 1123230 の名前と sname の正しい 16 進数を表示しますが、同じ文字「C481」が 1127766 の sname で取り除かれ、「3F」に置き換えられています。

どうしたの?これは 16 進数を実行している MySQL ですが、なぜ値が変更されたのでしょうか? また、一方の行で問題なく表示できるのに、もう一方の行では問題ないのはなぜですか?

サーバーを UTF8 用にセットアップし、MySQL でチェックを実行して、それが正しく設定されているかどうかを確認しました。これは CodeIgniter でも機能しません:(。「SET NAMES 'UTF8'」も送信しましたが、まだ喜びはありません。

これはSQLです:

$sql = 'select geonameid,name,sname, hex( name ) ,hex( sname ) from pp_adm1 where country = "af" COLLATE utf8_general_ci';

ここに画像の説明を入力

Sequel Pro - DB で正しいエンコーディングを表示する

SequelPro - DB で正しいエンコーディングを表示する

4

4 に答える 4

1

elvisptが述べたように、charsetとdbcollat​​を確認してください。

次のリンクは、mysqlの文字セットを変換するのに役立ちます(それが問題の場合)

http://www.bdunagan.com/2011/09/29/converting-mysql-from-latin1-to-utf8/

文字セットと照合を確認するために、いつでもMySQL変数を照会できます。

show variables like 'collation%';
show variables like 'character%';
于 2012-07-16T23:56:23.563 に答える
0

あたしも同じです。私もこの問題を抱えていました。そして、どれがHEXコードであるかがわかります:)一般的な解決策は、UTF-8データベースでUTF-8エンコーディングファイルを使用することです。このクエリを実行する前に、 SELECT 、 UPDATE anything などのクエリを作成するときはいつでも。

例:

/* クエリの前にこの行を追加します */

<?php
mysql_set_charset('utf8');
SELECT * FROM bla bla bla....  

?>

また、データベースに接続するたびに同じものが追加されることをお伝えしたいと思います。

例えば ​​。

<?php

mysql_set_charset('utf8');
mysql_connect('localhost','root','');
mysql_select_db('yourDatabase');

?>

この例がお役に立てば幸いです。とにかく私の悪い英語でごめんなさい:(

于 2012-07-16T17:30:30.277 に答える
0

[修正済み] - 問題の原因がわかりません。4時間後、影響を受けたテーブルを削除し、非常に慎重に再構築しました...

HEX() - 関数はとても役に立ちます...!!

申し訳ありません..より良い洞察を与えることはできません。

于 2012-07-17T08:37:33.767 に答える
0

database.php のパラメーターを確認charsetして構成します。dbcollatデータベースと CI の両方で文字セットが同じかどうかを確認します。また、 php.ini をチェックしても問題ありませんdefault_charset

于 2012-07-16T21:43:32.087 に答える