如何在 my.ini 中将 character_set_database 和 collat​​ion_database 设置为 utf8?

Posted

技术标签:

【中文标题】如何在 my.ini 中将 character_set_database 和 collat​​ion_database 设置为 utf8?【英文标题】:How to set character_set_database and collation_database to utf8 in my.ini? 【发布时间】:2014-04-29 15:14:14 【问题描述】:

我已经用谷歌搜索了很多关于这个问题的信息。总结一下,这就是我的my.ini 的样子:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[client]
database = abcdef
user = root
password = XXXXXX
default-character-set = utf8

[mysql]
default-character-set=utf8

[mysqld]
character_set_server=utf8
max_connections = 200
init_connect='SET collation_connection = utf8_general_ci' 
init_connect='SET NAMES utf8' 

当我通过 cmd 进入 mysql 并发出:show variables like "%character%";show variables like "%collation%";,这就是我得到的:

+--------------------------+---------------------------------+
| Variable_name            | Value                           |
+--------------------------+---------------------------------+
| character_set_client     | utf8                            |
| character_set_connection | utf8                            |
| character_set_database   | latin1                          |
| character_set_filesystem | binary                          |
| character_set_results    | utf8                            |
| character_set_server     | utf8                            |
| character_set_system     | utf8                            |
| character_sets_dir       | D:\env\MySQL5.6\share\charsets\ |
+--------------------------+---------------------------------+
8 rows in set (0.00 sec)

+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | utf8_unicode_ci   |
+----------------------+-------------------+

我已经重启了 MySQL 服务,所以谁能告诉我如何将 character_set_databasecollation_database 更改为 utf8?非常感谢。

【问题讨论】:

能否请您提及您的 MySQL 版本? 【参考方案1】:

这实际上不是my.cnf(或本例中的my.ini)中的设置。 mySQL 从数据库自己的排序规则(创建时)获取此设置。为了使这个内联与你想要的 utf8 编码,这样做:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;

然后在 mysql 上重新启动(不记得是否需要),然后是:

SHOW VARIABLES;

一切都会好起来的, 希望对您有所帮助!


旁注:我认为default-character-set 现在已被弃用(mySQL 5.5+)并且似乎使配置文件变得烦躁。

【讨论】:

我发现SHOW variables WHERE variable_name LIKE '%coll%' OR variable_name LIKE '%char%' 的总结不错 我只有这些数据库:错误(用于 bugzilla)、mysql、information_schema 和 performance_schema。我按照您的建议更改了错误和 mysql 数据库(没有更改 performance_schema 或 information_schema 的权限),但我仍然在 character_set_database 和 character_set_server 中有 utf8mb4。我正在尝试安装 OTRS 帮助台软件,它严格需要 utf8。此外,由于 mysql 的新版本,我无法对 my.cnf 进行建议的更改。你能帮忙吗? 能否避免数据库重启? 在 MySQL 5.7 上不需要重新启动。【参考方案2】:

我做个总结:

确定哪些字符集/排序规则可用

SHOW CHARSET;
SHOW COLLATION;

检查字符集

SHOW VARIABLES LIKE '%character%';
SHOW VARIABLES LIKE '%collation%';

设置字符集(在配置文件 -> my.cnf)

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

检查数据库/表字符集

SHOW CREATE DATABASE databasename;
SHOW CREATE TABLE tablename;

更改数据库/表字符集

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

创建数据库/表时设置:

CREATE DATABASE new_db CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;
CREATE TABLE new_table (id INT) CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

注意: 听说Mysql中的utf8不是真正的utf8,utf8mb4才是真正的utf8。 所以,如果你有特殊字符无法保存到 mysql,也许你应该使用 utf8mb4 和 utf8mb4_general_ci

【讨论】:

【参考方案3】:

如何配置Character SetCollation

对于使用默认 MySQL 字符集存储数据的应用程序 和排序规则(latin1, latin1_swedish_ci),无特殊配置 应该是需要的。如果应用程序需要使用 不同的字符集或排序规则,可以配置字符集 信息几种方式:

为每个数据库指定字符设置。例如,应用程序 使用一个数据库的应用程序可能需要utf8,而使用一个数据库的应用程序可能需要utf8 使用其他数据库可能需要 sjis。 在服务器启动时指定字符设置。这会导致服务器 将给定的设置用于所有不做其他应用的应用程序 安排。 如果您构建 MySQL,请在配置时指定字符设置 从源头。这会导致服务器对所有用户使用给定的设置 应用程序,而无需在服务器启动时指定它们。

此处显示的示例为您的问题设置 utf8 字符集,此处还设置排序规则以获得更多帮助(utf8_general_ci collat​​ion`)。

指定每个数据库的字符设置

  CREATE DATABASE new_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

在服务器启动时指定字符设置

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

在 MySQL 配置时指定字符设置

shell> cmake . -DDEFAULT_CHARSET=utf8 \
           -DDEFAULT_COLLATION=utf8_general_ci

这可能是一个冗长的答案,但有办法,你可以使用。希望我的回答对你有所帮助。更多信息http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html

【讨论】:

以上是关于如何在 my.ini 中将 character_set_database 和 collat​​ion_database 设置为 utf8?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql如何配置my.ini文件?

编辑mysql配置文件my.ini 可我的mysql里边没有my.ini

MySQL5.6+windows2008怎么没有my.ini配置文件

mysql的配置文件my.cnf 或者 my.ini在哪啊? 想修改它,怎么修改啊?

mysql密码忘记后如何跳过密码重新登陆并修改密码或者是没有my.ini文件怎么设置

MySQL配置文件-my.ini