mysql_install_db ツールを使用して新しいサーバーを作成しています。正しいデータディレクトリ、ポート、パスワード、サービスなどを設定します。しかし、問題はベース テーブルの文字セットと照合順序が間違っていることです。これらは utf8mb4 と utf8mb4_general_ci である必要があります。
インストール時にこれらのテーブルを変更する方法が見つかりません。my.cnf/my.ini を変更すると、新しく作成されたデータベースに対してのみ変更されます。ただし、mysql_install_db はシステム データベースを作成するため、それらは間違って作成されます。
また、私の msyql_install_db.exe は defaults-file 引数を受け入れないようです。
他にも奇妙なことがあります。新しいデータベースを作成するコマンドを実行すると、COLLATE を utf8mb4_unicode_ci に明示的に設定しているにもかかわらず、utf8mb3 も使用されます。
CREATE DATABASE IF NOT EXISTS tt DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
私は最新バージョンのmariadb 10.6.4を使用しています。
システム データベースに正しい文字セットと照合を設定する方法を知っている人はいますか?
Tools\mariadb-winx64\bin\mysql_install_db.exe --datadir="Tools\mariadb-data" --password=PASSWORD --port=8137 --service=MyDB
[アップデート]
次のように my.cnf を設定しようとしましたが、効果がないようです:https://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf
また、initializing-insecure で別の方法を試してみましたが、結果は同じでした。正しいエンコーディングで my.cnf を作成しましたが、テーブル エンコーディングがまだ間違っています。
mariadb-winx64\bin\mariadbd.exe --defaults-file=./my.cnf --initialize-insecure --datadir=./Test
そしてmy.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
skip-grant-tables
port = 5137
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
答え1
システム生成テーブル (information_schema
など) については心配しないでください。これらを変更しようとすると、深刻な問題が発生する可能性があります。
確かに、utf8mb3 ではなく utf8mb4 であるのは理にかなっています。ただし、その変換は MySQL と MariaDB の開発者に任せ、いつか修正してもらいます。
それはおそらく最適あなたのテーブルと接続は utf8mb4 である必要があります。ただし、それらを制御することはできます。