質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

1352閲覧

dbに登録されている2文字扱いになっている濁点文字の修正

tarao

総合スコア28

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2017/10/30 05:56

編集2017/10/30 06:20

mysqlに登録されている文字列の中の濁点文字が、文字と濁点で1文字のセットではなく、『 じ 』の場合だと、『 し 』と『 濁点 』の2文字扱いというふうに、一部ですが、なってしまっています。

『 じ 』でlike検索をした時に、きちんと1文字扱いで入っているデータは取り出せるのですが、『 し 』と『 濁点 』の2文字扱いになってしまっているものは取り出せません。
下記が『 ゛ 』でlike検索をした時のsqlです。

SELECT * FROM `categories` WHERE `name` LIKE '%゛%'

dbに登録されている既存のデータに、2文字扱いになってしまっている濁点文字が存在するかを調べて、mysql内で修正したいのですが、濁点のみでlike検索しても、ひっかからないため、洗い出すことができません。

一度全てのdbに登録されたデータを呼び出してから、
conv関数でUTF-8文字列に変換し、またデータを入れ直す方法しかないでしょうか?

ご教示お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2017/10/30 06:10

「濁点のみでlike検索」のクエリを提示したほうがよいのではないでしょうか。確認したところ濁点のみでの検索は問題なくできました。
tarao

2017/10/30 06:18

「濁点のみでlike検索」のクエリを質問欄に追加しました!よろしくお願いいたします。
kuniku

2017/10/30 06:59

できるかわかりませんが、 WHERE HEX(カラム) LIKE '%select hex('゛')%' のように、 濁点だけを16進にして検索や、TO_BASE64()でbase64にしてbase64で検索してみるとか。
tarao

2017/10/30 08:19

回答ありがとうございます!SELECT * FROM `categories` WHERE HEX(`name`) LIKE '%select hex('゛')%' でやってみましたが、『 #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 'ã‚›')%'  』のエラーが出てしまいました。またselect hex('゛')と実行して、取り出した値がE3829Bだったので、SELECT * FROM `categories` WHERE HEX(`name`) LIKE '%E3829B%' と実行したのですが、取り出すことができませんでした。。
guest

回答2

0

これだとどうなりますかね?

SQL

1SELECT * FROM `categories` WHERE `name` LIKE BINARY '%゛%'

投稿2017/10/30 06:25

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarao

2017/10/30 06:33

回答ありがとうございます。 試してみましたが、教えていただいたsqlでも、呼び出しができませんでした。 LIKE BINARY '%じ%' でも試してみましたが、2文字扱いになってしまっている『 じ 』は取り出せない状況です。
ttyp03

2017/10/30 06:39

ダメでしたか。お役にたてずに申し訳ないです。 調べてみると濁点の扱いはなんか難しいみたいですね。
tarao

2017/10/30 06:45

いえいえ、とんでもないです!どうもありがとうございます!
guest

0

テーブルの照合順をutf8_unicode_ciにしていれば、濁点半濁点をとわず、ひらがな・カタカナ両方
ヒットしますがそういうことではないですか?

SQL

1create table tbl1 (id int primary key,val varchar(20) character set utf8 collate utf8_unicode_ci); 2insert into tbl1 values(1,'し'),(2,'し゛'),(3,'じ'),(4,'シ'),(5,'シ゛'),(6,'ジ'); 3 4create table tbl2 (id int primary key,val varchar(20) character set utf8 collate utf8_bin); 5insert into tbl2 values(1,'し'),(2,'し゛'),(3,'じ'),(4,'シ'),(5,'シ゛'),(6,'ジ'); 6

テスト

select * from tbl1 where val like '%し%' /*戻り値:し,し゛,じ,シ,シ゛,ジ */ select * from tbl1 where val like '%し゛%' /*戻り値:し゛,シ゛ */ select * from tbl1 where val like '%じ%' /*戻り値:し,し゛,じ,シ,シ゛,ジ */ select * from tbl1 where val like '%゛%' /*戻り値:し゛,シ゛ */ select * from tbl2 where val like '%し%' /*戻り値:し,し゛ */ select * from tbl2 where val like '%し゛%' /*戻り値:し゛ */ select * from tbl2 where val like '%じ%' /*戻り値:じ */ select * from tbl2 where val like '%゛%' /*戻り値:し゛,シ゛ */

投稿2017/10/30 06:31

yambejp

総合スコア114933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarao

2017/10/30 06:45

回答ありがとうございます。 utf8_unicode_ciだと濁点半濁点をとわず、ひらがな・カタカナ両方ヒットするのですね。 今回はutf8_general_ciでという指定があるので変更はできないのですが、参考になりました!
yambejp

2017/10/30 06:57

utf8_general_ciだとアルファベットの大文字小文字は同値として解釈してくれますが 日本語として拡大解釈してくれないのでutf8_binと近い挙動になるでしょうね むりやりやるなら select * from tbl where val like '%゛%' で、全データをひっぱってきて、プログラムで一つ一つのデータを 「○゛」→一文字に変える処理をいれるしかないでしょうかね
tarao

2017/10/30 07:28

utf8_general_ciのままの場合 やはり全データ引っ張ってきて、一つ一つのデータを変えていくしかなさそうですね。 ありがとうございました!
yambejp

2017/10/30 07:31

まぁ今回は「utf8_general_ci」限定との話なのであれですが 依頼者に「utf8_unicode_ci」の有用性を説くのも一つかと思います もちろんあまり曖昧な一致されても困るという考えもあるので無理強いは禁物ですが
tarao

2017/10/30 07:41

そうですね。今回の事例を踏まえて考慮していきたいと思います! またご質問させていただくことがあると思いますが、よろしくお願いいたします! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問