• 締切済み

SUBSTRING文が日本語認識しない

MySQL初心者です。環境はOS:Linux、MySQLのバージョンは5.0.45 テーブル :friends フィールド:no,name,birth,emailがあるとして nameの中に、あゆみ、直美、純子、秀美など登録されているとします。 ここで、名前「name」の2桁目「美」という文字のデータを表示させてたくて mysql> SELECT * FROM friends WHERE SUBSTRING(name,2,1)='美'; と入力したのですが、Empty set (0.00 sec) と返ってきてしまいます。 例えば、 mysql> SELECT * FROM friends WHERE SUBSTRING(email,2,1)='o'; のように、半角文字だったら正しく返します。 どなたかアドバイスお願いします。

  • MySQL
  • 回答数2
  • ありがとう数4

みんなの回答

回答No.2

文字コードを、日本語を使えるように設定されていませんね。 少なくとも、次の4項目は、latin1では日本を使えません。 character_set_client:latin1 character_set_connection:latin1 character_set_database:latin1 character_set_server:latin1

knight-1
質問者

お礼

回答ありがとうございます。 ところで、設定を変えるにはmy.cnfを編集するんだと思うんですけど どこを編集すればいいんでしょうか?

回答No.1

文字コードは何ですか? SQLを入力できる状態で、次の命令を実行してみてください。 show variables like '%char%'

knight-1
質問者

補足

character_set_client:latin1 character_set_connection:latin1 character_set_database:latin1 character_set_filesystem:binary character_set_results:latin1 character_set_server:latin1 character_set_system:utf8 と返ってきました。

関連するQ&A

  • 日本語文字の抽出について

    SELECT * FROM pref WHERE pref_name='東京都'; としてもレコードが返ってきません。(レコード数が0になります。) 次にsubstringを用いて SELECT * FROM pref WHERE substring(pref_name) = '東京都'; としましたが、こちらでは下記のエラーになってしまいます。 何かよい方法はありませんんでしょうか? ERROR: function pg_catalog.substring(text) does not exist HINT: No function matches the given name and argument types. You may need to add explicit type casts.

  • 【初歩】SELECT文で思うような照会結果が得られない

    テーブル MYTABLEに、EMAILとPWというフィールドに、それぞれ、 name@example.jp、x6wvGZb7MZpBwMtQという文字列がINSERTされています。 これに対し、 SELECT * FROM `MYTABLE` WHERE `EMAIL` = 'name@example.jp' AND `PW` = 'x6wvGZb7MZpBwMtQ' を実行しても、レコードが返ってこないのですが、なぜでしょうか。 なお、 SELECT * FROM `MYTABLE` WHERE `EMAIL` = 'name@example.jp' なら1件返ってきますが、 SELECT * FROM `MYTABLE` WHERE `PW` = 'x6wvGZb7MZpBwMtQ' だと返ってきません。 シンプルな話なので、はじめはSQL文を手打ちしていてダメでした。 なので、phpMyAdminのGUIからSQL文を発行してみたら 一字一句同じSQL文が吐き出されましたし、照会結果も同じでした。

    • ベストアンサー
    • MySQL
  • where文について

    2008-10-28のような形式でMYSQLに生年月日を登録しています。 フォームのセレクトボックスにて誕生月のみを取得しlike文では なくwhere文でデータの読み込みを行いたいのですがどうやれば できるのでしょうか? 通常だと "SELECT * FROM テーブル名 where カラム名 = '200-10-28' " でいけると思うのですが誕生月のみの情報で "SELECT * FROM テーブル名 where カラム名 = '10' " とやっても無理ですよね^^; $_POST['birth_month']で誕生月を取得し数字は01~12までです。 ※取得は問題なくできておりわからないのがwhere文の書き方です。 できるだけシンプルな方法で行いたいのですがお分かりになる方が おりましたら是非ご教授お願い致します!

    • ベストアンサー
    • PHP
  • phpでmysqlからの呼び出しについての質問です。

    phpでmysqlからの呼び出しについての質問です。 現在mysqlから下記のように値を呼び出し、age=10の条件にあてはまるものだけを3つまで表示させたいと思っています。 $query = "SELECT id, name, birth, age FROM log WHERE age=10 LIMIT 0 , 3"; $hoge = $db->rowset_assoc($query) or $db->error("Query failed $query".__FILE__.__LINE__); foreach($hoge as $row) { $id= $row['id']; $name= $row['name']; $birth= $row['birth']; } $hoge = array( array("$id","$name","$birth"), array("$id","$name","$birth"), array("$id","$name","$birth"), ); 更新の度にシャッフルさせたいのでarrayを使用しているのですが、 これだと3つとも同じ数値が出てきてしまい困っています。 それぞれの値を取り出し、arrayに入れるにはどのようにすれば良いのでしょうか。 宜しくお願い致します。 大文字小文字の使い方については参考資料そのままに作成しましたので おかしい部分があるかもしれません。

    • ベストアンサー
    • PHP
  • MySQL文(プリペアドクエリ)がわかりません。

    いつもお世話になってます。 PHP+MySQLを使用しています。 下記のような操作を行いたいのですが、 MySQL文を教えて頂けませんでしょうか。 table名:person person_id : name : email 1 : tanaka : aaaaa 2 : suzuki : bbbbb 3 : sato : ccccc 4 : saito : ddddd 5 : takahasi : eeeee 上記のようなテーブルがあったとして、 例えば、person_idが2,4のものを抽出して、 table名:sendmail send_id : name : email : ticket 1 : ito : fffff : 10-20 2 : huruka : eeeee : 11-01 3 : suzuki : bbbbb : 11-19 4 : saito : ddddd : 11-19 上記テーブルに追加(send_idの3,4)したいのです。 ticketカラムは、send_idの3,4で同じ値(文字列)を使います。 SQL文だと、 INSERT INTO sendmail (name,email,ticket) SELECT name,email,'11-19' FROM person WHERE person_id IN ( 2 , 4 ) で大丈夫なのはわかりました。 これをプリペアドクエリに変換する方法がわかりません。 $para01="11-19"; $para02="2,4"; $db = new mysqli("xxxxx","yyyyy","zzzzz","wwwww"); $presql = $db->prepare("INSERT INTO sendmail (name,email,ticket) SELECT name,email,? FROM person WHERE person_id IN ( ? )"); $presql->bind_param("ss",$para01,$para02); $presql->execute(); 上記で実行してみましたが、$para02は"2"と判断されて、 table名:sendmail send_id : name : email : ticket 1 : ito : fffff : 10-20 2 : huruka : eeeee : 11-01 3 : suzuki : bbbbb : 11-19 になります。(person_idが4のものが抽出されない。) 大変お手数ですが、上記内容にてご教授願います。

    • ベストアンサー
    • MySQL
  • [初歩] はじめの2文字を切り取って真偽を判定するWHERE文

    例えば、テーブル:MYTABLE、カラム:CITYに、 横浜市緑区.... 川崎市宮前区... 藤沢市辻堂... …などと登録されているとします。ここで、SQL文で (1) はじめの全角2文字が「横浜」である (2) はじめの全角2文字が「横浜」でない(横浜以外) というWHERE条件をそれぞれ作りたいのですが。phpMyAdminで: (1) SELECT CITY FROM MYTABLE WHERE SUBSTRING( MYTABLE.CITY, 0, 4 ) = '横浜' ) (2) SELECT CITY FROM MYTABLE WHERE SUBSTRING( MYTABLE.CITY, 0, 4 ) != '横浜' ) などと実行してみたら、 #1064 - 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 ') LIMIT 0, 30' at line 1 などとエラーになります。何が誤っていますでしょうか?

    • ベストアンサー
    • MySQL
  • 1つのテーブルから複数のテーブルへのデータ振分け

    MySQLを使用して、tableAというテーブルのデータを tableB,tableC,tableDというテーブルに振り分けたいと思っています。 1日1回、自動的に行いたいと思っています。 たとえば、tableAのテーブル構成が下記のようなもので ================== name sex birth address phone email company ================== name,address,phoneはtableBに name,sex,birthはtableCに name,companyはtableDに分けるというような イメージです。 私の考えでは、下記のようなSQL文をPHPから呼び出して、タスクで 実行させてそれぞれ別のテーブルに振り分けようと思っている のですが、、もっと良いツールや方法があればお教えいただけ ませんでしょうか。 宜しくお願いいたします。 ---------------------------------------------------------------------------------------------------- INSERT INTO tableB (name,address,phone) SELECT tableA.name,tableA.address,tableA.phone FROM tableA AND INSERT INTO tableC (name,sex,birth) SELECT tableA.name,tableA.sex,tableA.birth FROM tableA AND INSERT INTO tableD (name,company) SELECT tableA.name,tableA.company FROM tableA; ----------------------------------------------------------------------------------------------------

  • phpでmysql_queryを使って以下の文

    phpでmysql_queryを使って以下の文を送るとエラーが出ます。 どうも、WHERE句で数字比較をするとダメなようです。 SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.name=table2.name WHERE turn<5 何がいけないのでしょうか? ・数字の5の部分はHTMLのテキストボックスからPOSTで貰っています。 ・WHERE句が無いとちゃんと動く。 ・WHERE句でLIKEを使った文字列比較は動く。 ・turnはphpMyAdminで見てもint(11)になっている。 ・実際は複数テーブルを連結したものです。わかりにくいので省きました。 ・PHP:5.4.29 ・MySQL クライアントのバージョン: 5.5.28 ・サクラレンタルサーバー(スタンダード)上での動作。

    • ベストアンサー
    • PHP
  • MySQLのselect文の設定に関して

    MySQLのselect文で、IDを例えば10001~10010までを検索する場合はどうすればいいのか教えて頂けないでしょうか? select * from table_A where ???

    • ベストアンサー
    • MySQL
  • like文の書き方を教えてください。

    テキストボックスを作成して入力した値がデータベースに 格納されている場合表示されるSQL文を書いていますが syntaxエラーになってしまい原因がわかりません。 String name = request.getParameter("name"); //入力された名前 String sql = new String(); <%-- SQL文 --%> sql += " select * from data "; sql += " where name "; sql += " like" + "('%" + s_name + "%')"; sql += " ) "; <input type="text" name="name" value=""> //textBox エラー表示 8番目: SQL = select * from data where name like('%i%') ) 9番目: ResultSetに格納失敗 : java.sql.SQLException: 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 ')' at line 1  となってしまいます。 コマンドプロンプト上で select * from data where name like('%itou%'); この場合はちゃんと表示されます。 お分かりになる方よろしくお願い致します。

    • ベストアンサー
    • MySQL