• 締切済み

MySQLのソートについて

こんにちわ。 今PHPとMySQLでデータベースの練習をしています。日本語をソートすると変な順番にソートされてしまいます。 SELECT * FROM NAME_T ORDER BY NAME_KANA_C NAME_KANA_Cには名前が全角カナで入力されてます。 これでソートしますと、 テ*** ハ*** ヒ*** フ*** ときて、なぜか シ*** となります。これは何故なんでしょうか? よろしくお願いします。 文字コードはEUCです。

みんなの回答

  • misoka
  • ベストアンサー率35% (56/160)
回答No.2

EUCということは、Linux環境か何かでしょうか? MySQLはデフォルトの文字コードが“latin1” ですので、そのへんが原因かもしれませんね。 /etc/my.confに [mysqld] default-character-set=ujis の記述はあるでしょうか。

ryu00026
質問者

お礼

原始的な方法ながら、新しいINT型のカラムを設け、switch文でアなら1という具合にデータを追加し、なんとか解決しました。 他によい方法もあったかもしれませんが・・・ ともかくお二人ともありがとうございました。

ryu00026
質問者

補足

レンタルサーバーなので、こちらからは見れないんです。サーバーはLinuxです。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

まさか「シ」が半角とか言うことはないですよね。

ryu00026
質問者

補足

DBへ登録する段階で全角カナへ置換してるので、それは無いと思います。

関連するQ&A

  • MySQLでカタカナでの並び替えがうまくできない。

    MySQLでorder by句を使った並び替えができず困っています。 Mysqlバージョン 5.0.77 エンコード euc-jp 全角カタカナでフリガナが入っているフィールドがあり、その項目でソートをかけようとしていますがうまくいきません。 /etc/my.cnfの[mysqld][client]にはそれぞれ default-character-set=ujis を設定しています。 それ以外に何か設定しなくてはならない項目があるのでしょうか? 設定以外でも何か上手くソートできる方法があれば教えてください。 よろしくお願いいたします。

  • 二次元配列のソートについて

    PHPでデータベースの複数のテーブルから ID、名前、かな、点数といったデータを 読み込んでテーブルに保存しています。 SELECT id, name, kana, tensu FROM a, b, c ORDER BY tensu といった形で出来ると思っていたのですが エラーが出てできませんでした。 そこで各テーブルのデータを 読み込んで二次元配列にしてソート してみたのですが、なぜか以下のソースだと データが重複されて表示されて 困っています。 $saidai = count($tbl); for ($i=0 ;$i<$saidai;$i++){  $sort[$i] = $i; } for($i=0;$i<$saidai;$i++){  for($j=0;$j<$saidai;$j++){   if($tbl[$sort[$i]][2] > $tbl[$sort[$j]][2]){    $work = $sort[$i];    $sort[$i] = $sort[$j];    $sort[$j] = $work;   }  }  表示 } こんな感じですがどうも繰り返しても 同じデータばかりが表示されます。 いろいろ試してみましたが結局出来ませんでした。 表示するデータがかぶらないようにするには どうすればよろしいですか? お願いいたします。

    • ベストアンサー
    • PHP
  • phpでmysqlのデータがupdateできません。

    仕様Apache2.0 PHP5.1.6 MySQL5.0.27 です。 以下の通りです。どこがだめですか? <FORM method="POST" action="order_regist.php"> <INPUT type="hidden" name="id" value="<?=$id?>"> <INPUT type="hidden" name="order_day" value="<?=$order_day?>"> <INPUT type="hidden" name="order" value="依頼あり"> <INPUT type="submit" value="同意して作業を依頼"> </FORM> 上記を次ページへ送信 以下次ページ /* MySQL DB接続情報の設定 DB名/ユーザー名/パスワード */ define("DB_NAME", "*****"); define("DB_USER", "*****"); define("DB_PASS", "*****"); /* リクエストデータの取得 */ $id = $_REQUEST["id"]; $order_day = $_REQUEST["order_day"]; $order = $_REQUEST["order"]; /* MySQLに接続 */ $link = mysql_connect("localhost", DB_USER, DB_PASS) or die("MySQLとの接続に失敗しました。"); /* 接続データベースを選択 */ mysql_select_db(DB_NAME) or die("データベースとの接続に失敗しました。"); /* クライアントのキャラクタセットを変更 */ mysql_query("SET NAMES ujis") or die( "クエリーの実行に失敗しました" ); /* データを更新するクエリーを設定 */ $query = "UPDATE all_cleaning_user SET order = '" . $order . "', order_day = '" . $order_day . "' WHERE id = " . $id; /* データベースにクエリーを実行 */ mysql_query($query) or die("クエリーを実行できませんでした。"); /* MySQLより切断 */ mysql_close($link); クエリーを実行できませんでしたのエラーが出ます。なぜですか?

    • ベストアンサー
    • PHP
  • NULL値を含むソート

    MySQL4.0.20を使っています。 以下のようなデータをソートすると NULLが先に表示されます。 これをNULLを最後にして、数値のソートをかけたいです。何か解決策はありますか?2回に分ける方法しかないのでしょうか? nullと非null ◆元データ A --- 5 NULL 2 NULL 3 1 select A from xxx order by A asc; ●望まない結果 A --- NULL NULL 1 2 3 5 ●望む結果 A --- 1 2 3 5 NULL NULL ※話は変わりますが、4.1で日本語EUCの文字化けバグは直っているのでしょうか?

    • ベストアンサー
    • MySQL
  • Mysql4.0からMysql5.0へデータ移動法

    MySQL4.0のデータベースのバックップデータがローカルPCにあります。 ただしphpmyadminでエクスポートしたのではないので、直接のデータ(FRM/MYD/MYIファイル)しかありません。 ※MySLQ4.0のサーバーも廃止しています。 この状況で、phpmyadmin2.11.11のインポートを使いMySQL5.0のデータベースへローカルPCにあるデータを上げたいのですが、良い方法はあるのでしょうか? また注意すべき点などありますか? ファイルの文字セット:utf8 部分インポート:設定しない(レコード数0) ファイル形式:SQL エンコーディング:non (EUC/SJIS選択しない) 全角カナ変換:設定しない 上記設定でインポートしよう思っています。 インポート時の上記、各項目の選択を間違えるとデータ壊れてしまうのでしょうか? 正しくインポートできないと、HPコンテンツの他のファイルが壊れることもありますか? 独自で色々調べてみましたが検索HITしたページはすべて内容がバラバラでどれが正しい方法か分からず、「ダンプとかってなに?」というくらい素人ですので噛み砕いた説明していただけると有難いです。

    • ベストアンサー
    • MySQL
  • 変な文字で表示されます

    ホームページを作ろうと思いWARDに文書で入力して 完成したのでHTML形式で保存しました、次に作ったものを表示させてブラウザの「表示」のなかにある「ソース」をクリックしてHTML言語をコピーしました。 最後にヤフーの無料ホームページ作成の「アドバンスHTMLエディタ」というのに貼り付けて保存し、ページを開いてみるとなぜか ・ヲ・ゥ。シ・ュ・鵐ー、茹ケ・ネ・・テ・チ、鮖マ、皃ソ、熙キ、゛、キ、ソ、ャ。「 。。。。。。 。。、ハ、ォ、ハ、ォサラ、テ、ソ、隍ヲ、ヒ・タ・、・ィ・テ・ネ、ホク嵂フ、ャ、「、鬢・・コ、ネ、ニ、ヌコ、鵑ヌ、、、゛、キ、ソ。」 という変な文字がのがいっぱい出てきました。 (テキストの大きさはWARDで打ったときの文字と変わっていませんでしたが) どうやったらちゃんと表示されるのでしょうか。 回答お願いします。

  • php MySQL データ登録 方法

    以前もご質問させていただいたのですが、調べてもわからず困り果てています。 PHPとMySQLは初心者です。 PHPのバージョンはPHP 5.2.12 MySQLのバージョンは 5.1 サーバーはさくらインターネットを使用しています。 コードは下記のとおりになります。 form.php <html> <body> <form action="complete.php" method="POST"> <input type="text" name="id"> <input type="text" name="password"> <input type="text" name="first_name"> <input type="text" name="last_name"> <input type="text" name="first_kana"> <input type="text" name="last_kana"> <?php print '<select name="b_year">'."\n"; $start = date('Y') -40; $end = date('Y') -16; for ($i = $start; $i <= $end; $i++) { $selected = ""; $selected = ($_POST["b_year"] == sprintf('%04d',$i)) ? "selected":""; print '<option value="' . sprintf('%04d',$i) . '" '.$selected.'>' . sprintf("%04d",$i) . '</option>' . "\n"; } print '</select> 年' . "\n"; (文字数のためb_monthとb_dayを省略) ?> <input type="text" name="number"> <input type="text" name="height"> <input type="text" name="weight"> <input type="submit" name="regist" value="登録"> <input type="reset" name="reset" value="リセット"> </form> </body> </html> complete.php <?php ・ ・ $id = mysql_real_escape_string($_POST['id']); $password = mysql_real_escape_string($_POST['password']); $first_name = mysql_real_escape_string($_POST['first_name']); $last_name = mysql_real_escape_string($_POST['last_name']); $first_kana = mysql_real_escape_string($_POST['first_kana']); $last_kana = mysql_real_escape_string($_POST['last_kana']); $year = mysql_real_escape_string($_POST['b_year']); $month = mysql_real_escape_string($_POST['b_month']); $day = mysql_real_escape_string($_POST['b_day']); $number = mysql_real_escape_string($_POST['number']); $height = mysql_real_escape_string($_POST['height']); $weight = mysql_real_escape_string($_POST['weight']); ・ ・ $query_reg = sprintf("INSERT INTO `member` (`id`,`password`,`first_name`,`last_name`,`first_kana`,`last_kana`,`b_year`,`b_month`,`b_day`,`number`,`height`,`weight`) VALUES('$id',$password,'$first_name','$last_name','$first_kana','$last_kana',$year,$month,$day,,$number,$height,$weight"); $result_reg = mysql_query($query_reg, $link) or die(mysql_error()); if ($result_reg) { $msg = '登録しました。'; } else { $msg = '登録に失敗しました。'; } ・ ・ ・ ?> <html><body><?php print $msg; ?></body></html> とフォームを入力してデータベースに登録をするという流れです。 ご質問ですが、フォームに項目を入力して登録するとデータベースに登録がされます。 しかし、数字のみ($number、$height、$weight)の場所を未入力にするとエラーが出力されます。 エラーは 「You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near」です。 MySQLは下記のように設定しています。 id varchar(20) None password varchar(255) None first_name varchar(8) NULL last_name varchar(8) NULL first_kana varchar(8) NULL last_kana varchar(8) NULL b_year int(4) NULL b_month int(2) NULL b_day int(2) NULL number varchar(2) NULL height varchar(3) NULL weight varchar(3) NULL 未入力でもエラーが表示されずデータベースに入力されたとこだけ登録されるようにするにはどうしたらよろしいのでしょうか? お分かりの方がいらっしゃいましたらご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 配列のソート

    下記のような形でデータを取得し結果を配列に格納し、 降順にソートしたいのですが、いい方法が見つかりません。いい方法はあるでしょうか。よろしくお願いします。 テーブル構造(test) ID|name |point|area| ==================== 1 |Aさん|56 | A | 2 |Bさん|12 | B | 3 |Cさん|24 | B | 4 |Dさん|34 | B | $sql = "select * from test"; $result = mysql_query($strSQL); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { ここで配列に格納 } 配列への格納方法と、pointの降順にソートする 方法が知りたいです。 最終的に、Aさん、Dさん、Cさん、Bさんと なるようにしたいです。

    • ベストアンサー
    • PHP
  • phpでの文字エンコード

    携帯用のHPを作っているのですが、データベース文字コードがEUC-JPの為、一部の携帯では正常に表示されないでいます。 それで文字コードをShift_JISに変換してから出力したいのですが、 同時にmb_convert_kanaを使って全角カナを半角にしたいとも考えています。 個別に変換するなら、 $str = mb_convert_kana($row["~"],"k"); print mb_convert_encoding($str,"SJIS","EUC-JP"); で良いかと思うのですが、 ページ全体の出力文字を一気に変換する方法がわからないでいます。 そのような方法はあるのでしょうか? どうぞ宜しくお願いします。

    • ベストアンサー
    • PHP
  • DB内にあるデーターのソート

    こんばんわ。 以下の件について、どなたがサンプルソースを交えてご教授下さい。 環境: windows Apache2 + PHP5 + MySQL データーベースにある、2つのフィールドを対象にして データーをソートして表示させたいのですが、なにかいい方法はありませんか。 例 対象データベース↓ id name point item 1 user1 340 item1 2 user2 540 item1 3 user3 210 item2 4 user4 319 item2 5 user5 233 item3 このデータベースを読み込み、以下の様にソートし表示したいのです。 ◇item1 user2:540 user1:340 ◇item2 user4:319 user3:210 ◇item3 user5:233 ※item欄にあるデーター毎に、pointの高い数値に並び替える。 以上、よろしくお願いします。

    • 締切済み
    • PHP