Mariadb: "mysql Ver 15.1 Distrib 10.3.8-MariaDB"
OS: Windows 10 64 bit
我一直在努力使用“load data infile”将包含“高 8 位”字符(例如微米字符和长划线)的 csv 数据文件读入 mariadb 中的表中。
数据库、表和列都设置为utf8。
经过多次尝试,我使用外部程序(Notepad++)将 csv 文件从原始 ANSI 代码页 1252(cp1252)编码转换为 utf8,并在 mysql 客户端中手动使用“set names 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 客户端在两个客户端选项上出现错误-
mysql: unknown variable 'character_set_client=utf8'
mysql: unknown variable 'character_set_connection=utf8'
答案1
我在使用 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 上测试
答案2
注意:原始编辑已移至答案
我找到了正确的咒语-
[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'
--更新-- 自从将 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 改变了一些关于配置变量的规则,否则这似乎是该版本的一个新问题。