はじめまして。
状況
MariaDBを用いて、データベースの作成を行いました。
その後、レコードの検索をしようとしたところ、検索文字列が含まれているにも関わらずヒットしない問題が発生しました。
実行したSQL文は以下となります。
SQL
1SELECT * FROM db WHERE title LIKE '%検索文字列%'
検索対象のカラムはVARCHAR型で、テーブルのエンコーディングはutf8mb4に設定されています。
また、検索文字列とDBに登録されている文字列は日本語です。
※追記
MariaDBのバージョンは10.5となります。
CREATE TABLE `info` ( `id` int(32) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(128) NOT NULL DEFAULT '', `groups` varchar(128) NOT NULL DEFAULT '', `genre` int(64) NOT NULL DEFAULT 2, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
データはMac向けのアプリケーション(sequel pro)の機能を用いて追加しました。(SQLは用いていません)
試したこと
試しに、レコードから文字列をコピーし、SQLのLIKE句内にペーストして実行してみると、問題なく検索文字列の含まれたレコードを取得できました。
自分で入力した文字列と、レコードに登録されている文字列をテキストエディタで比較したところ、同じ文字列として扱われています。
しかし、以下のサイトで両者をバイナリに変換したところ、異なる結果となりました。
https://rakko.tools/tools/74/
※追記
以下が比較したテキストと、それらをバイナリ化したものです。
・バイナリ文字列
ラブライブ(DB)
11100011 10000011 10101001 11100011 10000011 10010101 11100011 10000010 10011001 11100011 10000011 10101001 11100011 10000010 10100100 11100011 10000011 10010101 11100011 10000010 10011001
ラブライブ(手入力)
11100011 10000011 10101001 11100011 10000011 10010110 11100011 10000011 10101001 11100011 10000010 10100100 11100011 10000011 10010110
他のレコードについても調べてみたところ、同様に検索できないものが一部存在し、それらもバイナリ化すると異なるものとなりました。
DB管理アプリのクエリ機能が問題かと思い、Pythonのライブラリを用いてSQLを実行してみたのですが、改善できませんでした。
質問内容
同じ文字列であるにも関わらず、違う文字列として扱われている原因として、どのようなことが考えられるでしょうか。
また、この場合、データベースの該当するレコードをすべて修正しなければ、検索を行うことは不可能なのでしょうか。
ご教授のほどよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー