为 MySQL 数据库设置默认字符集/排序规则

5 mysql collation character-set

我有一个曾经是 latin1 的 MySQL 数据库,我将所有表中的所有列都更改为 utf8。但是,我显然没有做我必须做的所有事情,因为我刚刚发现我疯狂地混合了拉丁语和 utf8。基本上,任何新表和列都是不同的。

有没有办法设置数据库的默认字符集和排序规则,以便当我向该数据库添加新表时它们是 utf8?

Der*_*ney 11

是的,您可以在各个级别设置默认字符集和排序规则。

首先,在您的问题中,在数据库级别

CREATE DATABASE IF NOT EXISTS foo 
 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE 'utf8_general_ci'
Run Code Online (Sandbox Code Playgroud)

或者

ALTER DATABASE foo
 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE 'utf8_general_ci'
Run Code Online (Sandbox Code Playgroud)

如果表创建命令中未指定,则该数据库中的所有新表都应使用新字符集和数据库创建(如果在 table 命令中指定,则规范将覆盖数据库默认值)。

通过在 my.cnf 中提供--character-set-server--collation-server选项并重新启动服务器,您可以在服务器级别设置默认值(以便所有表都使用所有数据库的默认值创建,除非另有明确说明)。

最后,验证客户端连接设置。本文档解释了客户端连接如何微调(和覆盖)默认设置。

  • 您还应该检查客户端的默认字符集是否正确,因为数据库服务器可以具有与客户端不同的默认值! (2认同)
  • 使用`utf8_unicode_ci`。请参阅 [stackoverflow 条目](http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci) 为什么。 (2认同)