web-dev-qa-db-ja.com

WHEREを実行する前に、base64がmysql列をデコードする

基本的に-長い話ですが、base64文字列としてエンコードされたデータベースのフィールドがあります。

EG:これはデータベースに保存されます:

_YToyOntzOjIwOiJUeXBlX29mX29yZ2FuaXNhdGlvbiI7czoyMDoiTWVtYmVyIG9mIFBhcmxpYW1lbnQiO3M6ODoiUG9zdGNvZGUiO3M6NzoiUEUxIDFKQSI7fQ==
_

これはこれに等しい:

_a:2:{s:20:"Type_of_organisation";s:20:"Member of Parliament";s:8:"Postcode";s:7:"#postcode#";}
_

私ができることは、この文字列_LIKE '%Member of Parliament%'_を選択することです。 WHEREを実行する前に、mysqlカラムをbase64でデコードする方法はありますか?

例:SELECT * FROM table WHERE base64_decode(column) LIKE '%Member of Parliament%'

ありがとう

17
Thomas Clayson

MySQL 5.6.1以降を使用している場合は、FROM_BASE64()関数を使用できます。

TO_BASE64()で使用されるbase-64エンコードルールでエンコードされた文字列を受け取り、デコード結果をバイナリ文字列として返します。引数がNULLまたは有効なbase-64文字列でない場合、結果はNULLです。エンコードとデコードのルールの詳細については、TO_BASE64()の説明を参照してください。

この関数はMySQL 5.6.1で追加されました。

mysql> SELECT TO_BASE64( 'abc')、FROM_BASE64(TO_BASE64( 'abc')); -> 'JWJj'、 'abc'

それ以外の場合は、次のユーザー定義関数を使用できます。 https://github.com/y-ken/mysql-udf-base64

29
Boy Baukema