无法使用my.cnf更改mysql服务器排序规则

时间:2016-02-27 17:38:43

标签: mysql character-encoding collation

我想将我的MySQL服务器字符集和排序从latin1更改为UTF8。我研究了一下,似乎这是通过" my.cnf"需要在MySQL中读取您输入的配置选项的文件夹中的文件。我没有" my.cnf文件"在我的Mac(OSX Yosemite,MySQL 5.7)上,按照说明我将示例1复制到' / 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)

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

1 个答案:

答案 0 :(得分:0)

首先,请记住,您放入my.cnf的内容是默认并且会更改现有表的任何表定义,也不会更改任何字符存储在那些表中。

“数据库”的默认值必须位于[mysqld]

之下

我忽略了数据库默认值,只要在创建表时就显式:

CREATE TABLE (...) ...
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE       utf8mb4_unicode_520_ci;

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

您也可以

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