MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【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系の照合順序を指定してください。文字セットと照合順序の組み合わせを確認したうえで、目的に合った設定を選択することが重要です。

  1. 【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

  2. MySQLでテーブル内の^(キャレット)文字を検索する方法

    MySQLで^文字を検索するには?MySQLのテーブルやカラム名に含まれる^(キャレット)文字を検索したい場合は、LIKE演算子を使用します。特に、information_schemaデータベースのcolumnsテーブルを参照することで、データベース全体から^を含むカラム名を効率的に特定できます。基本の検索構文以下の構文を使用して、^文字を含むカラムを検索できます。select table_schema, table_name, column_namefrom information_schema.columnswhere column_name like %^%;このクエリは、スキーマ名(t