mysqlに"とうこう"と登録しているものと
"どうこう"と登録しているものが同じものと判別され、"とうこう"だけを取り出したくても、一緒に来てしまいます
何か手立てはありますか
詳しい方、よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
回答3件
0
ベストアンサー
詳細が書かれていないので、一般論で記載しますが、お使いの MySQL の 照合順序(collation)は、 utf8_unicode_ci でしょうか? utf8_bin でしょうか?
utf8_unicode_ci は、『大文字・小文字,濁点・半濁点』を区別しない。
utf8_bin は、区別する。
と決まっていますので、区別が必要な場合は、utf8_bin を使うようにしてください。
投稿2018/11/05 03:52
総合スコア25234
0
SQL
1create table tbl( 2id int primary key, 3val1 varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci , 4val2 varchar(100) CHARACTER SET utf8 COLLATE utf8_bin ); 5insert into tbl values 6(1,'とうこう','とうこう'), 7(2,'どうこう','どうこう'), 8(3,'xうこう','xうこう');
としたとき、val1はブレを吸収するので
SQL
1select * from tbl where val1='とうこう'; 2select * from tbl where val1='どうこう';
どちらでも両方表示されます。
val2は厳密に評価するので
SQL
1select * from tbl where val2='とうこう'; 2select * from tbl where val2='どうこう';
それぞれ正確に該当するものしかヒットしません。
逆に属性を無視して処理するにはstrcmpを利用してcollateを指定します
SQL
1select * from tbl where not STRCMP(val1 COLLATE utf8_unicode_ci,'どうこう'); 2select * from tbl where not STRCMP(val2 COLLATE utf8_unicode_ci,'どうこう');
※両方ヒット
select * from tbl where not STRCMP(val1 COLLATE utf8_bin,'どうこう'); select * from tbl where not STRCMP(val2 COLLATE utf8_bin,'どうこう');
※厳密にヒット
投稿2018/11/05 04:22
編集2018/11/05 04:32総合スコア118405
0
照合順序を調べてみるといいですよ。
追記
少し前に誰かが紹介していたサイト
MySQL Innovation Day Tokyo で MySQL 8 の文字コードについて話した
投稿2018/11/05 03:53
編集2018/11/05 04:38退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。