私のデータベースで、regexpで小文字で始まる文字列をすべて選択しようとしていますが、何らかの理由で大文字で始まる文字列もすべて選択しています。私は間違って何をしていますか? MySQL REGEXP manualから小文字で始まるデータベースからすべての文字列を選択する
SELECT *
FROM `allData`
WHERE response REGEXP '^[a-z]'
LIMIT 0 , 30
私のデータベースで、regexpで小文字で始まる文字列をすべて選択しようとしていますが、何らかの理由で大文字で始まる文字列もすべて選択しています。私は間違って何をしていますか? MySQL REGEXP manualから小文字で始まるデータベースからすべての文字列を選択する
SELECT *
FROM `allData`
WHERE response REGEXP '^[a-z]'
LIMIT 0 , 30
:
REGEXPは、バイナリ文字列を使用する場合を除き、大文字と小文字の区別はありません。
あなたは代わりに、バイナリ文字列を使用しているときしたがって、いくつかの運を持っていることがあります。
WHERE response REGEXP BINARY '^[a-z]'
実証のための合理的に愚かなフィドル:http://sqlfiddle.com/#!9/7eade/3
EDIT:レイがコメントで言うように、あなたがすべきをおそらく、すべての照合を処理するために、代わりに[[:lower:]]
を使用してください。
WHERE response REGEXP BINARY '^[[:lower:]]'
ありがとう。これは完全に機能します。 – frosty
これがうまくいく場合は、受け入れ可能とマークしてください:) – slugonamission
文字セットと照合の間で '[[:lower:]]'が '[a-z] 'よりも一般的ではないと思いませんか? – Ray
SELECT *
FROM allData
WHERE LOWER(LEFT(response, 1)) <> LEFT(response, 1)
LIMIT 0 , 30
は...しかし、これは私がREGEXP BINARY
と一緒に一致させるために、MySQLの文字クラス名を使用することになり、あなたのMySQL character collation
によって制限されることがあります。
WHERE response REGEXP BINARY '^[[:lower:]]'
私はドン」文字クラス名[:lower:]
が常にすべての低値に一致する場合、[a-z]
がすべての文字セットと照合で意味を持つかどうかを知る大文字アルファベット文字。 [ドキュメント] 1として
select * from alldata where lower(left(response,1)) COLLATE Latin1_General_CS_AS =left(response,1) and response is not null and response<>''
(http://dev.mysql.com/doc/refman/5.7/en/regexp.html): 'REGEXPは、バイナリ文字列を使用する場合を除き、大文字と小文字は区別されません。 ' –