无法将 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;
我想将我的 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;