女子の「頭皮」のお悩み解決の選択肢とは?

LIKEで検索をすると、
清音と濁音・半濁音を区別してくれないのですが、
これをちゃんと区別してくれるようにする方法はありますでしょうか?

たとえば、
「ハナナ」「パナナ」と検索しても「バナナ」に一致してしまいます。

これをちゃんと区別するようにしてほしいのです。

ご教授お願いします。

A 回答 (2件)

SELECT 'は' = 'ぱ';


は真になってしまいますね。

SELECT binary 'は' = binary 'ぱ';
をやってみてくれません?

多分、これでうまくいくと思います。
COLLATE の設定に依存しますが。
    • good
    • 0
この回答へのお礼

なるほど!
BINARYで区別すればよいのですね!

ありがとうございました!!

お礼日時:2008/04/04 18:13

・mysqlのバージョン


・フィールドのデータ型

を補足したほうがよいのでは?

この回答への補足

すみませんでした;;

バージョンは5.0.51a
データ型はvarcharです。

よろしくお願いします。

補足日時:2008/04/03 16:59
    • good
    • 0

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

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

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

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

QSQLのLIKE検索で清音と濁音/半濁音を区別する

VB2008+Accessでアプリケーションを開発しています。

SQLのLIKE検索では、清音と濁音/半濁音、ひらがなとカタカナ等を区別してくれないのですが、これを区別してくれる方法はないでしょうか?

例:(field1はテキスト型フィールド)
SELECT * FROM tblA WHERE field1 LIKE '%グラス%'
を実行すると、
「クラス」「思いめぐらす」なども検索されてしまいます。
これを、
「サングラス」「グラスワイン」などだけがヒットするようにしたいのです。

ちなみに、MySQLではコチラに回答がありました。
http://oshiete1.goo.ne.jp/qa3918969.html

Accessだけが不可能で、SQLServerやOracleならできるかどうかも知りたいです。どうぞ宜しくお願いします。

Aベストアンサー

LIKEではないですが、
SELECT Name FROM Table1 WHERE InStr(StrConv(Name,128),StrConv('グラス',128))<>0
で抽出できます。 
パフォーマンスについては調べていません。(相当悪いかも)

QMySQLで半角濁音文字の検索

宜しくお願い致します。

MySQLのselect検索時にフリーワード検索をしています。
DB上には半角・全角文字が混在しており、検索窓に入力した文字の全角・半角を区別せずに検索しております。

文字コードがUTF-8なので、SQL文のwhere区で「collate utf8_unicode_ci」を指定して全角・半角の区別無しで検索しております。

しかし、半角濁音文字、たとえば「ベルト」や「パワー」等の文字列がDB上に半角カタカナで入っている場合に検索窓に全角で入力しても検索できません。

原因はDB上では半角の「ヘ」と「濁音記号」として認識しており、検索窓に入れた文字列は、そのまま「ベ」という1文字として認識しているので検索できないと思われます。

この問題を解決する方法が無くて悩んでおります。
どなたかご教授の程、宜しくお願いいたします。

Aベストアンサー

show varaiables like '%char%';

でキャラクターセットの設定状況を教えてください。

こちらでは
create table tbl ( id int primary key, name varchar(30) )
engine=innodb default charset=utf8;

insert into tbl values ( 1, 'ガ' );
insert into tbl values ( 2, 'ガ' );
insert into tbl values ( 3, 'ペ' );
insert into tbl values ( 4, 'ペ' );

select * from tbl where name collate utf8_inicode_ci = 'ガ';
+------+--+-
| id | name |
+--+-----+
| 1 | ガ |
| 2 | ガ |
+------+

select * from tbl where name collate utf8_inicode_ci = 'ペ';
+------+--+-
| id | name |
+--+-----+
| 3 | ペ |
| 4 | ペ |
+------+

当方ではWindows7で「set names cp932;」で行った場合、Ubuntuで「LANG=ja_JP.UTF8」
「character_set_database=utf8」の環境で確認しました。

show varaiables like '%char%';

でキャラクターセットの設定状況を教えてください。

こちらでは
create table tbl ( id int primary key, name varchar(30) )
engine=innodb default charset=utf8;

insert into tbl values ( 1, 'ガ' );
insert into tbl values ( 2, 'ガ' );
insert into tbl values ( 3, 'ペ' );
insert into tbl values ( 4, 'ペ' );

select * from tbl where name collate utf8_inicode_ci = 'ガ';
+------+--+-
| id | name |
+--+-----+
| 1 | ガ |
| 2 | ガ |
+------+

selec...続きを読む

Q検索で濁点や半濁点をヒットさせない

MySQLで検索をすると濁点や半濁点もヒットしてしまいます。
「%カルビ%」で、「カルビスープ」も「カルピス」もヒットしてします。

照合順序は「utf8_unicode_ci」ではダメで「utf8_bin」でもダメでした。

PHPにて「%カルビ%」の検索結果から「カルピス」を除去すればいいのですが、
MySQLにて検索で濁点や半濁点をヒットさせない方法はありますか?

Aベストアンサー

こちらでは
col like '%カルビ%' collate utf8_bin
の場合は清音、濁点、半濁点を区別するようですが。

よろしければ、collateをどのように指定しているか教えてください。

Q半角の濁音、半濁点の除去の除去

SQL Server 2005 Express Edition で、
半角カナ文字列の中の濁点、半濁点を
除去する方法はあるでしょうか。

SET @after = REPLACE(@before, '濁点', '')
※実際は「濁点」ではなく半角の濁点を記述しています。

このようなやりかたでは除去できませんでした。

Aベストアンサー

SQL Serverのデフォルトの照合順序(Japanese_CI_AS)では、できないと思いますので、照合順序を変更します。
SET @after = REPLACE(@before, '濁点', '' COLLATE JAPANESE_BIN)

Japanese_CI_ASは、大文字小文字、かな、全角半角を区別しないという意味ですが、区別したとしてもカナの濁点部分だけを認識させることはできませんので、バイナリ照合を指定するということです。

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

QMySQLでデータベースにデータinsert時のエラー。

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column '******' at row 1
とエラーがでて解決できません。どこがおかしいのでしょうか?(JAVA初心者ですいません。)

Aベストアンサー

私の場合ですが、データベース接続直後に
"SET NAMES SJIS;"
を実行すれば正常にINSERT出来ました。

なお、テーブルの作成時に文字コードをSJISにしておく必要があります。私は(cp932 -- SJIS for Windows Japanese)にしました。
後からテーブルの文字コードを修正してもうまくいきませんでした。

Q複数フィールド対してLIKE '% %' したい

SQL初心者なのですが、複数のフィールドをターゲットにしたフリーワード検索用のSQL文の書き方が解らず困っております。
例えば以下の様に"責任者"フィールドを限定して"田中"さんを探す事は出来るのですが、
----------------------------------------------------------------
SELECT * FROM `会員表` WHERE 責任者 LIKE '%田中%'
----------------------------------------------------------------
複数の、例えば以下の3つの
●責任者フィールド
●担当者フィールド
●顧客フィールド
全てを対象に一括で”田中”さんを検索したい場合、
どのように記述すれば良いのでしょうか?

どなたか有識者の方いらっしゃいましたら宜しくお願いします!!

Aベストアンサー

#1さんの方法はお勧めできません。

1)インデックスがきかない
2)セパレータを用いていない

1)に関しては、そもそも前後に%をいれた時点で、きかないので
あまり気にすることもないかもしれませんが、2)に関しては
たとえば、「責任者=吉田,担当者=中村」さんでもヒットします。
これはセパレータに適当な区切り文字を入れる必要があるでしょう。

まっとうに考えれば

(責任者 LIKE '%田中%'
OR 担当者 LIKE '%田中%'
OR 顧客 LIKE '%田中%')
とかじゃないですかねぇ

Qダブルクォーテーションのreplaceの方法

JavaScriptで文字を置換する際に
AAA = new String(AAA).replace(/ZZZ/g, "QQQ");
にしますよね、これで文字列中のダブルクォーテーション「"」を
任意の文字に変換したいのですが、何か良い方法はないでしょか?

よろしくお願いします。

Aベストアンサー

AAA.replace(/\"/g,"Q");
このように「"」の前に\をつけるといいですよ。

Q複数カラムに対するLIKE文の最適化

column1~column3のデータに文字検索をしたいのですが、
下記のような不恰好なSQLしか思いつきません、、。

select * from tb where
  ( column1 like '%word1%' or column2 like '%word1%' or column3 like '%word1%' )
and ( column1 like '%word2%' or column2 like '%word2%' or column3 like '%word2%' )
and ( column1 like '%word3%' or column2 like '%word3%' or column3 like '%word3%' )

試しに、
select * from tb where
  ( ( column1 or column2 or column3) like '%word1%' )
and ( ( column1 or column2 or column3) like '%word2%' )
and ( ( column1 or column2 or column3) like '%word3%' )

と考えたのですが、これですと検索結果0件になってしまいます。
もっとスマートなSQL文がありましたら、ご教授頂きたいです。

column1~column3のデータに文字検索をしたいのですが、
下記のような不恰好なSQLしか思いつきません、、。

select * from tb where
  ( column1 like '%word1%' or column2 like '%word1%' or column3 like '%word1%' )
and ( column1 like '%word2%' or column2 like '%word2%' or column3 like '%word2%' )
and ( column1 like '%word3%' or column2 like '%word3%' or column3 like '%word3%' )

試しに、
select * from tb where
  ( ( column1 or column2 or column3) like '%word1%' )
a...続きを読む

Aベストアンサー

文字列を連結して、あたかも一つの列であるように見立てた上でLIKEとする。

ただし、3つのカラムのうちの一つでもNULLだと全体がNULLになる。

参考URLの5番目に対策あり。

参考URL:http://www.orangesoft.co.jp/RDB/rdb_memo_strcat.html

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。


人気Q&Aランキング

おすすめ情報