Error while connecting to MariaDB 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'への対処方法
- yokotaniresearch
- 2月26日
- 読了時間: 2分
こんにちは。データサイエンス部門の横谷謙次です。
さて、MariaDBを使って、そのデータベースを呼び出そうとすると「Error while connecting to MariaDB 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'」というエラーが出ます。
このエラーは、MariaDBにおいてデフォルト設定されている文字種「'utf8mb4_0900_ai_ci'」が上手く読み込めない、ということを意味します。
これまで、様々なアプローチがこれまで提案されていますが(詳細は下記のサイト)、あんまり良い対処方法が無かったですので、私なりの対処方法を示します。
1.データベース側で文字種を指定
まず、MariaDBにログインした後、使用するデータベースの文字種を「utf8mb4_unicode_520_ci」に指定します。つまり、デフォルト設定の文字種を改変します。
MariaDB [your_db]> ALTER DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
もちろん、your_dbというのはご自身のデータベース名を入力してください。
2.サーバー側で同じ文字種を指定
次に、サーバー側でMariaDBを呼び出す際に、
「charset='utf8mb4',
collation='utf8mb4_unicode_520_ci',」と指定して、先ほど改変したものと同じ文字種を指定します。
こんな感じです。
try:
connection = mysql.connector.connect(
host='localhost',
database='your_db',
user='your_username',
password='your_password',
charset='utf8mb4',
collation='utf8mb4_unicode_520_ci',
use_pure=True
)
if connection.is_connected():
もちろん、データベース名、ユーザー名、パスワードなどについてはご自身の設定を記入して下さい。
これでデータベース側とサーバー側で文字種が'utf8mb4_unicode_520_ci'に変更されて、かつ、統一されたので、エラーはなくなるはずです。
3.雑感
なお、このエラーの根本的な原因はmysqlという古いデータベースを使用して、MariaDBという新しいデータベースにアクセスしたため、と考えられます。言い換えると、このエラーは新旧データベース間の互換性の問題により発生していると言えます。
もしmysqlのデータベースがさほど構築されていない状態でしたら、新しいデータベースであるMariaDBに統一して、データベースを改めて構築しても良いかもしれません。こちらの方がシンプルでかつ根本的な解決策と思います。
ただし、この解決策はmysql側のデータベースを根本的に改変するので、運用しているmysql側のデータベースが破損するかもしれません。このあたりは自己責任でお願いいたします(汗)。
Comments