タイトルそのままなのですが、動作確認用のデータとして絵文字が含まれるレコードを探す必要があり、その時の対応内容を記しておきます。
MySQLのバージョンは8.0.28です。
前提
自分の環境は以下の状態です。
- 絵文字が登録可能なテーブル(
DEFAULT CHARSET=utf8mb4
)は既に存在している - DB自体の
DEFAULT CHARSET
はutf8mb4
ではない
utf8mb4
とは何ぞや?とかcollations
って何さ!という方は以下の記事をご参照ください。
先に結論
mysqlコマンドで接続する時に--default-character-set=utf8mb4
を追加してやればOK。
mysql -u username -h hostname --default-character-set=utf8mb4
普通に検索できました。
MySQL [db]> select * from bbs_threads where detail like '%🍣%'\G
************** 1. row **************
id: 2
title: 🍣🍣🍣🍣🍣
detail: 🍣🍣🍣🍣🍣
created_at: 2024-06-17 03:35:21
updated_at: 2024-06-17 03:37:26
1 row in set (0.00 sec)
いつも通りに接続するとどうなるか
collations
が混在していると怒られました。
$ mysql -u username -h hostname
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 337138
Server version: 8.0.28 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [db]> select * from bbs_threads where detail like '%🍣%'\G
ERROR 1267 (HY000): Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
「Illegal mix of collations」で検索したところ、WHERE句にCOLLATE
を指定すればエラー回避できるという記事を見たので試してみましたが、自分の環境ではうまくいかなかったです。
MySQL [db]> select * from bbs_threads where detail like '%🍣%' COLLATE utf8mb4_general_ci;
ERROR 1253 (42000): COLLATION 'utf8mb4_general_ci' is not valid for CHARACTER SET 'utf8mb3'
おまけ。
文字コード指定なしの接続だと、id指定で検索したらデータ取得はできたのですが、絵文字部分は正しく表示されませんでした。
MySQL [db]> select * from bbs_threads where id=2\G
************** 1. row **************
id: 2
title: ?????
detail: ?????
created_at: 2024-06-17 03:35:21
updated_at: 2024-06-17 03:37:26
1 row in set (0.00 sec)
文字コードまわりはちゃんと理解したいけど追いついていないところです。。