【MySQL】「ñ」を検索する際に「n」を含むレコードを除外する方法
MySQLで「ñ」と「n」を区別して検索する方法
MySQLで「ñ(エニェ)」を検索したとき、デフォルトの照合順序では「n」を含むレコードまで一緒にヒットしてしまうことがあります。これは、多くの照合順序がアクセント記号の違いを無視するためです。「ñ」だけを正確に検索し、「n」のみを含むレコードを除外したい場合は、COLLATE句でutf8_spanish_ciを指定します。
基本構文
select *from yourTableName where yourColumnName LIKE '%ñ%' COLLATE utf8_spanish_ci;
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。以下がそのクエリです。
mysql> create table NotIncludenDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName varchar(20)
-> );
Query OK, 0 rows affected (1.07 sec)
レコードの挿入
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。
mysql> insert into NotIncludenDemo(ClientName) values('John');
Query OK, 1 row affected (0.21 sec)
mysql> insert into NotIncludenDemo(ClientName) values('Johñ');
Query OK, 1 row affected (0.14 sec)
mysql> insert into NotIncludenDemo(ClientName) values('Johnñy');
Query OK, 1 row affected (0.18 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from NotIncludenDemo;
実行結果は以下の通りです。
+----+------------+ | Id | ClientName | +----+------------+ | 1 | John | | 2 | Johñ | | 3 | Johnñy | +----+------------+ 3 rows in set (0.00 sec)
「ñ」を含むレコードだけを検索する
ここで、COLLATE utf8_spanish_ciを指定して「ñ」を検索します。
mysql> select *from NotIncludenDemo where ClientName LIKE '%ñ%' COLLATE utf8_spanish_ci;
実行結果は以下の通りです。
+----+------------+ | Id | ClientName | +----+------------+ | 2 | Johñ | | 3 | Johnñy | +----+------------+ 2 rows in set (0.60 sec)
ポイント解説
このように、COLLATE utf8_spanish_ciを指定することで、「John」のような「n」のみを含むレコードは除外され、「Johñ」「Johnñy」のように実際に「ñ」を含むレコードだけが取得できます。スペイン語の照合順序では「ñ」が独立した文字として扱われるため、アクセント付き文字を正確に区別できるのが特徴です。
なお、環境によってはutf8ではなくutf8mb4を使用している場合があります。その際はutf8mb4_spanish_ciなど、対応するutf8mb4系の照合順序を指定してください。文字セットと照合順序の組み合わせを確認したうえで、目的に合った設定を選択することが重要です。
-
【MySQL入門】LIKEとORを組み合わせたテキスト検索でレコードを取得する方法
MySQLでは、LIKE演算子とOR条件を組み合わせることで、複数のキーワードのいずれかに一致するレコードを柔軟に検索できます。本記事では、実際のコード例を通じて、その基本的な使い方をわかりやすく解説します。1. テーブルの作成まず、検索対象となるテーブルを作成しましょう。mysql> create table DemoTable ( Subject text ); Query OK, 0 rows affected (0.86 sec)2. レコードの挿入続いて、INSERTコマンドを使用してテーブルにサンプルデータを登録します。mysql> insert into De
-
MySQLでテーブル内の^(キャレット)文字を検索する方法
MySQLで^文字を検索するには?MySQLのテーブルやカラム名に含まれる^(キャレット)文字を検索したい場合は、LIKE演算子を使用します。特に、information_schemaデータベースのcolumnsテーブルを参照することで、データベース全体から^を含むカラム名を効率的に特定できます。基本の検索構文以下の構文を使用して、^文字を含むカラムを検索できます。select table_schema, table_name, column_namefrom information_schema.columnswhere column_name like %^%;このクエリは、スキーマ名(t