无法将 mysql 服务器排序规则更改为 my.cnf

Cannot change mysql server collation with my.cnf

我想将我的 MySQL 服务器字符集和排序规则从 latin1 更改为 UTF8。我研究了一下,似乎这是通过 "my.cnf" 文件完成的,该文件需要位于 MySQL 读取您输入的配置选项的文件夹中。我没有 "my.cnf file" 在我的 Mac (OSX Yosemite, MySQL 5.7) 上,所以按照说明我将示例一复制到“/etc”。

在内部,我为 mysql-client、mysqld 和 mysql-server 创建了条目,如下所示:

# For advice on how to change settings please see
# ...some stuff ...

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

但是,这不起作用。

我的设置显示如下:

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | latin1             |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | latin1             |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_general_ci |
| collation_database       | latin1_swedish_ci  |
| collation_server         | latin1_swedish_ci  |
+--------------------------+--------------------+
10 rows in set (0.00 sec)

我能做些什么来改变它?或者我应该保持原样并在创建时将其设置为数据库级别?

首先,请记住,您在 my.cnf 中输入的是 defaults 并且 不会 更改任何 table 现有 table 的定义,也不是那些 table 中已存储的任何字符。

'database' 的默认值需要低于 [mysqld]

我忽略了数据库默认值,并且在创建 table:

时简单明了
CREATE TABLE (...) ...
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE       utf8mb4_unicode_520_ci;

这样,我就不会被你描述的那种错误配置所困扰。

你也可以

CREATE DATABASE ...
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE       utf8mb4_unicode_520_ci;