Mariadb: "mysql Ver 15.1 Distrib 10.3.8-MariaDB"
OS: Windows 10 64 bit
「loaddatainfile」を使用して、micron文字やemdashなどの「上位8ビット」文字を含むcsvデータファイルをmariadbのテーブルに読み込むことに取り組んできました。
データベース、テーブル、および列はすべてutf8に設定されています。
何度も試行した後、外部プログラム(Notepad ++)を使用してcsvファイルを元のANSIコードページ1252(cp1252)エンコーディングからutf8に変換し、mysqlクライアントで「setnames utf8」を手動で使用して、ファイルを不格好な方法でロードしました。 。
ただし、これをプログラムのデフォルト構成として設定するのに問題があります。
Mariadb(Mdb)のドキュメントを読んで、my.cnfを次のように設定しました-
# Set everything to utf8 (utfmb3 I believe?)
[server]
character_set_server = utf8
character_set_connection = utf8
default-collation = utf8_general_ci
init-connect = 'SET NAMES utf8'
[client]
character_set_client = utf8
character_set_connection = utf8
しかし、mysqlクライアントはエラーで2つのクライアントオプションを窒息させます-
mysql: unknown variable 'character_set_client=utf8'
mysql: unknown variable 'character_set_connection=utf8'
この点でも、mariadbで同様の問題が発生しました。
まず、デフォルトのmy.cnfのcharacter-set-serverとcollation-serverは使用しないでください。character_set_serverとcollation_serverである必要があります(下線を引くだけです)。
私の設定は次のようになります:
[client]
default-character-set = utf8mb4
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
mysqlは次のことを報告します:
mysql -e "show variables where variable_name like '%char%' or variable_name like '%coll%';"
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+----------------------------+
10.4.7でテスト済み-MariaDB
注:元の編集は回答に移動しました
私は正しい呪文を見つけました-
[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
これは仕事をしているようです。クライアントまたは接続指向の構成変数のように見えるものがmysqlクライアントによって受け入れられない理由をまだ理解していません-
mysql: unknown variable 'character_set_client=utf8'
mysql: unknown variable 'character_set_connection=utf8'
--UPDATE-- Mariadbをバージョン10.3.12に更新してから、これは部分的に再び壊れたようです。
上記と同じ設定ファイルの設定で、mysqlクライアントは現在レポートしています-
mysql -e "show variables where variable_name like '%char%' or variable_name like '%coll%';"
+--------------------------+-----------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MariaDB 10.3\share\charsets\ |
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_general_ci |
| collation_server | latin1_swedish_ci |
+--------------------------+-----------------------------------------------+
character_set_server
とcollation_server
の設定がデフォルトに戻りました。これらの設定は、セッションごとにmysqlクライアントを介して個別に変更できますが、システムのデフォルトでは、構成ファイルの設定が無視されます。
V10.3.12が構成変数に関するいくつかのルールを変更しない限り、これはこのバージョンの新しい問題のようです。