出産前後の痔にはご注意!

phpmyadmin 文字化けを開きテーブルを見ると日本語が化けてしまいます。
php のプログラムからは読み書き、表記は正しくできます。

いろいろ調べ以下をやったのですがだめでした。

「MySQLの設定」
# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1
default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
#skip-character-set-client-handshake
※最終的にコメントアウト
[mysql]
default-character-set = utf8
[mysqldump]
default-character-set = utf8
MySQLをリスタートする。
# /etc/rc.d/init.d/mysqld restart


「phpMyadminの設定」
# vi /var/www/phpmyadmin/config.inc.php
$cfg['DefaultLang'] = 'utf-8';
$cfg['DefaultConnectionCollation'] = 'utf8_general_ci';
$cfg['FilterLanguages'] = '';
$cfg['DefaultCharset'] = 'utf-8';
$cfg['AllowAnywhereRecoding'] = TRUE;

apache再起動


何か足りない点はありますでしょうか?

環境は以下です。

phpMyAdmin
•バージョン情報: 3.5.1 (最新版)

•サーバ: Localhost via UNIX socket
•ソフトウェア: MySQL
•ソフトウェアバージョン: 5.1.61 - Source distribution
•プロトコルバージョン: 10
•ユーザ: root@localhost
•サーバの文字セット: UTF-8 Unicode (utf8)

このQ&Aに関連する最新のQ&A

A 回答 (1件)

とりあえず



(1)phpMyAdmin上で所定のテーブルの照合順序をutf8_unicode_ciあたりにしておく
(2)文字列の入っているカラムの照合順序を同様に調整する

登録させているデータがEUCならujis_japanese_ciとかになるかも・・・
sjis系は問題外なので省略
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qphpmyadminで日本語データが文字化け

phpmyadminで日本語のデータだけ文字化けしてしまいます。

phpで作成された掲示板からデータをmysqlに投稿し、そのデータを再度掲示板で表示しています。

投稿・表示するphpファイルはutf8で、mysqlのmy.cnfは以下のようになっています。
---------------
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

character-set-server=utf8

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8
---------------

phpmyadmin(2.11.11)側は、MySQ の接続照合順序:utf8_unicode_ci にしています。

phpmyadminで文字化けしているデータをphpで見ると問題なく表示されてるのが不思議です。

どこが問題なのでしょうか。

phpmyadminで日本語のデータだけ文字化けしてしまいます。

phpで作成された掲示板からデータをmysqlに投稿し、そのデータを再度掲示板で表示しています。

投稿・表示するphpファイルはutf8で、mysqlのmy.cnfは以下のようになっています。
---------------
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

character-set-server=utf8

[mysqld_safe]
log-error=/var/log/mysql...続きを読む

Aベストアンサー

単にphpMyAdmin上の文字化けだけなら

$cfg['DefaultLang']
$cfg['DefaultConnectionCollation']
$cfg['DefaultCharset']

あたりの設定を調整してみてはいかがですか?

QphpMyAdmin内での文字化け

サーバはさくらインターネットを利用してます。
レンタルサーバから専用サーバに移転したのですが、
専用サーバではphpMyAdminで日本語データの文字化けが起きます。

専用サーバのphpMyAdminからDB作成の際、下記の設定で行い、

MySQLの文字セット UTF-8 Unicode (utf8)
MySQLの接続照合順序 utf8_unicode_ci
DB の照合順序 utf8_unicode_ci

レコードをINSERTする際、下記のように文字コードを指定し、
$sql=mb_convert_encoding($sql,"EUC-JP","EUC-JP");
execute_sql($con, $sql);

実行したら、phpMyAdmin内で日本語データが文字化けしました。
サイト内で表示しているDBデータ(日本語)は文字化けしませんでした。

DB の照合順序をutf8以外(ujis_japanese_ciなど)として、
DBを作った場合、レコードをINSERTしたら、サイト内のDBデータも
phpMyAdmin内データもどちらも日本語が文字化けします。

また、レンタルサーバのphpMyAdminからDBデータをエクスポートして、
専用サーバのphpMyAdminからインポートした場合、
読み込むDBデータファイルの文字コードをUTF-8にしなければ、
phpMyAdmin内で日本語データが文字化けしてしまいます。
ただ、UTF-8にしてインポートしてもphpMyAdmin内では
文字化けしませんが、サイト内で表示しているDBデータは
文字化けします。

専用サーバのphpMyAdminから
データを日本語の文字列に編集・更新したら、
phpMyAdmin内ではそのデータに関しては文字化けなく表示されますが、
サイト内ではそのデータは文字化けしてしまいます。

専用サーバ情報は下記の通りです。

【専用サーバ】
OS:CentOS 5
Apache 2.2.3
PHP5.1.6
DBサーバ:MySQL 5.0.77
アップしているファイルの文字コード:EUC

分かる方、ご回答、よろしくお願いいたします。

サーバはさくらインターネットを利用してます。
レンタルサーバから専用サーバに移転したのですが、
専用サーバではphpMyAdminで日本語データの文字化けが起きます。

専用サーバのphpMyAdminからDB作成の際、下記の設定で行い、

MySQLの文字セット UTF-8 Unicode (utf8)
MySQLの接続照合順序 utf8_unicode_ci
DB の照合順序 utf8_unicode_ci

レコードをINSERTする際、下記のように文字コードを指定し、
$sql=mb_convert_encoding($sql,"EUC-JP","EUC-JP");
execute_sql($con, $sql);

実行したら...続きを読む

Aベストアンサー

普通は、文字化け等で悩まなくてもいいように、HTMLの文字コード、PHPソースの文字コード、そしてDBの文字コードは一致させる事が求められます。
イレギュラーに文字コードをバラバラにするのであれば、文字コードをきちんと理解した対処をしましょう。

>レコードをINSERTする際、下記のように文字コードを指定し、
>$sql=mb_convert_encoding($sql,"EUC-JP","EUC-JP");
>execute_sql($con, $sql);

>サイト内で表示しているDBデータ(日本語)は文字化けしませんでした。

当然ですね、EUC-JPで保存してるのでとりだしたときもEUC-JPになります。
HTML(およびPHP)の文字コードとしては合っているので、結果的に文字化けしていないだけです。
保存時に一旦文字化けして、取り出し時に逆文字化けしているので、結果的に文字化けしていないように見える、と言えば判りやすいですかね。

ただ、
>実行したら、phpMyAdmin内で日本語データが文字化けしました。
これも当然です。
UTF-8のDBに対して、EUC-JPで保存しているのですから。
先の例で言えば、保存時に一旦文字化けしている結果です。

>phpMyAdminからデータを日本語の文字列に編集・更新したら、サイト内ではそのデータは文字化けしてしまいます。
これも当然です。
先の例で言えば、取り出し時に逆文字化けした結果です。

保存時には、#1、#2の方のいうようにUTF-8に変換して保存する必要があります。
$sql=mb_convert_encoding($sql,"UTF-8","EUC-JP");

そして取り出し時には、毎回、EUC-JPに変換して出力しなければなりません。
echo mb_convert_encoding($hoge['field1'],"EUC-JP","UTF-8");
echo mb_convert_encoding($hoge['field2'],"EUC-JP","UTF-8");
echo mb_convert_encoding($hoge['field3'],"EUC-JP","UTF-8");
このように面倒な事をしたくないために、イレギュラーな設計をしないのが普通です。

>$sql=mb_convert_encoding($sql,"UTF-8","EUC-JP");
>で実行してみましたが、別の変な文字に文字化けしました。
おそらく、クライアントの文字コードが正しく認識されていないのではないかと思います。
MySQLに接続直後に以下の関数を実行してください。
mysql_set_charset('utf8');
クライアントの文字コードをMySQLに対して通知する関数です。
環境によっては、"SET NAMES utf8"をクエリーとして発行する方法をとらなければならないかもしれません。


※もしかしたら、上記のすべてが以下の一行一発だけで解決するんじゃないかな、との期待ができなくもありません。
理屈の上ではあり得るかも、というレベルですが。
mysql_set_charset('euc-jp');

普通は、文字化け等で悩まなくてもいいように、HTMLの文字コード、PHPソースの文字コード、そしてDBの文字コードは一致させる事が求められます。
イレギュラーに文字コードをバラバラにするのであれば、文字コードをきちんと理解した対処をしましょう。

>レコードをINSERTする際、下記のように文字コードを指定し、
>$sql=mb_convert_encoding($sql,"EUC-JP","EUC-JP");
>execute_sql($con, $sql);

>サイト内で表示しているDBデータ(日本語)は文字化けしませんでした。

当然ですね、EUC-JPで保存してるの...続きを読む

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Qphpからinsertできない

またお世話になります。
PHPからMySQLへデータをインサートしたいのですが、各サイトを参考にしながら試しているのですがどうにも上手くいきません。
ソースを見ていただけますでしょうか?

$con = mysql_connect("localhost","user","password")
or die("MySQLに接続できません。");

mysql_select_db('test');
$sql = "SET CHARACTER SET UTF8";
$result = mysql_query($sql);

$data1 = $HTTP_POST_VARS["inpdata1"];
$data2 = $HTTP_POST_VARS["inpdata2"];
$data3 = $HTTP_POST_VARS["inpdata3"];

$sql = 'INSERT INTO `tab1` (`abc`, `def`, `ghi`) VALUES (`$data1`,`$data2`,`$data3`);';
$result = mysql_query($sql);

print $data1; //ここでは通常にデータが表示されるので
print $data2; //データの受け渡しは問題ないはずですが。
print $data3;

mysql_free_result($result);
mysql_close($con);

またお世話になります。
PHPからMySQLへデータをインサートしたいのですが、各サイトを参考にしながら試しているのですがどうにも上手くいきません。
ソースを見ていただけますでしょうか?

$con = mysql_connect("localhost","user","password")
or die("MySQLに接続できません。");

mysql_select_db('test');
$sql = "SET CHARACTER SET UTF8";
$result = mysql_query($sql);

$data1 = $HTTP_POST_VARS["inpdata1"];
$data2 = $HTTP_POST_VARS["inpdata2"];
$data3 = $HTTP_POST_VARS["inpdata3...続きを読む

Aベストアンサー

$result = mysql_query($sql) or die(mysql_error());

としてデバッグしてみるといいですよ。

×$sql = 'INSERT INTO `tab1` (`abc`, `def`, `ghi`) VALUES (`$data1`,`$data2`,`$data3`);';
○$sql = "INSERT INTO `tab1` (`abc`, `def`, `ghi`) VALUES ('$data1','$data2','$data3')";

単純に、valuesの中で渡すデータはバッククォーテーションではなく
シングルクォーテーションです。フィールド名ではなくデータを
わたしたいのですから・・・。
$sql変数に代入する場合のくくりはダブルクォーテーションですね。
(変数を参照するため)

それと念のため、sqlのケツのセミコロンは取っておいた方がよいです。

QParse error: syntax error, unexpected T_STRING in・・・118と出るのですが

Parse error: syntax error, unexpected T_STRING in 。。。 on line 118
とでるのですが対処はどうすればよろしいでしょうか?

Aベストアンサー

118行目をみてみてください。
ダブルクォーテーションのなかでダブルクォーテーションを使ったり
してませんか?
基本的な文法ミスなので、自己解決できないと今後きびしいですよ。

QPHPでメッセージボックス表示

お世話になります。
PHPでVBみたいな
メッセージボックス表示は
できるのでしょうか?
レンタルサーバのPHPMYADMIN
では、クエリ実行の確認時にでるのですが・・
できればボタンクリック時に別画面に遷移して
処理したくないので。
宜しくお願い致します。

Aベストアンサー

PHPはサーバサイドです。
サーバ上で動作しています。

メッセージボックスは、クライアント側の処理になります。

>レンタルサーバのPHPMYADMINでは、クエリ実行の確認時にでるのですが・・

単純にjavascriptで表示させているだけだとおもいます。
alertとかで。

QSELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか

SELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか?
MYSQLサーバのバージョンは5.0.77です。

下記のように「*」を使用して指定テーブルの全カラムを表示する方法がありますが、
SELECT TableName.* FROM TableName

上記の逆で、指定テーブルの指定カラム以外の全カラムを一括指定って可能でしょうか?
例えば下記のような「^」みたいな、又は同等な書き方があれば良いなと思ってまして。
SELECT TableName.^ColumnName1 FROM TableName

ちなみに、下記のように一つ一つ表示したいカラムを指定する方法以外です。
SELECT TableName.ColumnName2 , TableName.ColumnName3 FROM TableName

よろしくお願いします。

Aベストアンサー

ない。
SQL文でそんなことをするより、メソッドとして作ればいいんじゃないですか。
だいたい、それ以外のカラムの数がわからないし、並びも不明だし。

#1に方と同じで
SELECT * from xxxx
なんてのは正気の人間は書きません。
カラムの数も位置も属性もわからないSQL文の結果をどうやって扱うのか。


人気Q&Aランキング