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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

2308閲覧

mysql 任意の文字列を含まない文字列の正規表現

hagiwarasannnnn

総合スコア13

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2019/08/27 04:46

前提・実現したいこと

mysql 任意の文字列を含まない文字列の正規表現

発生している問題・エラーメッセージ

文字列中に「アイウエオ」を含まないレコードを取得したいのですが、レコードが1件も取得できません。

該当のソースコード

実行したsql :
SELECT * FROM master WHERE m_kana REGEXP '^(?!アイウエオ).*$'

「?」をエスケープしています。
phpMyadmin上で直接叩いて実行しています。

試したこと

「?」をエスケープせず実行 : SELECT * FROM master WHERE m_kana REGEXP '^(?!アイウエオ).*$'

補足情報(FW/ツールのバージョンなど)

Mysql 5.6

MariaDB 10.1上では、「?」をエスケープせず下記のSQL文を使って正常なレコードを取得できました。
SELECT * FROM master WHERE m_kana REGEXP '^(?!アイウエオ).*$'

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

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

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

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

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

guest

回答3

0

これを読む限り、その機能はマルチバイトセーフじゃない(マルチバイト文字を使うとどのような挙動するか保障とれません)みたいですね
12.5.2 正規表現

なので、どうしてもmysql5.6で、正規表現でやる場合は、マルチバイト文字をエンコードして、そのエンコード文字に対して正規表現をかけるなどの工夫が必要になります。

投稿2019/08/27 05:08

編集2019/08/27 05:10
FKM

総合スコア3624

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

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

hagiwarasannnnn

2019/08/27 05:30 編集

ご丁寧にありがとうございます。 読む限り、非推奨みたいなので今回は別のやり方を取ります。
maisumakun

2019/08/27 05:21

確かにこれはひどい罠だ>マルチバイトセーフでない
guest

0

ベストアンサー

正規表現を使わずに、これではまずいのでしょうか。

SQL

1SELECT * FROM master WHERE m_kana NOT LIKE '%アイウエオ%'

なお、MariaDBは10.0.5からPCREが入って正規表現が強化されています。それ以前のMySQL 5.6では、(?!のような高度な正規表現に対応していません。

投稿2019/08/27 04:59

maisumakun

総合スコア145183

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

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

hagiwarasannnnn

2019/08/27 05:18

対応してないのですね。 LIKEを使うことにします。ありがとうございます。
guest

0

ふくまないなら含むのnotを取るだけでは?

SQL

1WHERE not ( m_kana REGEXP 'アイウエオ')

投稿2019/08/27 06:01

yambejp

総合スコア114747

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問