背景
本番環境のデータを検証環境で利用する際に、個人情報を適切にマスキングが必要になりました。
具体的には、名前などの個人情報を変換し、一部の文字を残して他は*で置き換える必要があります。
例
変換前 -> 変換後
鈴木一郎 -> 鈴***
山田太郎 -> 山***
データベースにはMySQL 5.7が使用されています。
解決方法
MySQLで特定の条件で文字列を変換するためには、SUBSTRINGやCONCATなどの文字列関数を利用します。
以下は、usersテーブルのname列に対して、一文字目を残し、残りの文字を*で埋めるSQLの例です。
UPDATE users
SET name = CONCAT(SUBSTRING(name, 1, 1), REPEAT('*', CHAR_LENGTH(name) - 1))
このクエリでは、SUBSTRING関数で文字列の最初の文字(一文字目)を抽出し、REPEAT関数で残りの文字を*で埋めます。
最終的にCONCAT関数でこれらを結合して、変換された名前を取得します。
最後に
プログラムでレコードを1つずつ取得し文字列を変換する方法もありますが、SQLを使用することで効率的に変換できました。