MySQL中的字符集服务器VS默认字符集

时间:2014-06-10 21:17:45

标签: mysql character-encoding

character-set-serverdefault-character-setmy.cnf之间的区别是什么?我想设置MySQL与UTF8的连接,这两者似乎都有效。一个比另一个好吗?

2 个答案:

答案 0 :(得分:1)

始终使用

character-set-server
  

如果未在CREATE DATABASE语句中指定数据库字符集和排序规则,则将服务器字符集和排序规则用作默认值。他们没有其他目的(source

character-set-server已取代default-character-set设置,因为default-character-set现在为deprecated,可能会导致problems

P.S。我认为newtover的回答是错误的。

答案 1 :(得分:0)

以下是MySQL docs的引用:

  

您可以强制客户端程序使用特定字符集,如下所示:

[client]
default-character-set=charset_name
     

这通常是不必要的。但是,当character_set_systemcharacter_set_servercharacter_set_client不同,并且您手动输入字符(作为数据库对象标识符,列值或两者)时,这些可能会在客户端的输出中显示不正确或输出本身可能格式不正确。在这种情况下,使用--default-character-set=system_character_set启动mysql客户端 - 也就是说,将客户端字符集设置为与系统字符集匹配 - 应解决问题。

换句话说,character_set_servercharacter_set_clientmysqld的设置,当default-character-setmysql的设置时,其他客户端库会覆盖character_set_client 1}}默认情况下由mysqld假设。

如果您将mysql连接到localhost,则可能看不到区别,但当您连接到其他可能具有其他默认设置的服务器时也会使用default-character-set

UPD 2018-08-17

正如约翰史密斯所注意到的,我的答案目前已经过时,但它的本质仍然是正确的:character_set_server是一个服务器变量,但当你用客户端连接到mysqld时,你应该指定客户端和连接设置。

在这些日子里,许多用作客户端和服务器的计算机都将utf-8作为区域设置编码的默认设置,并且只有因为设置character-set-server而不是default-character-set似乎才有效。< / p>

要明确的是,要将mysqld(即服务器)设置为使用utf-8,并将其某些排序规则设置为模式名称,表名称,列名称和列值的默认值,而不是latin1_swedish_ci在mysqld配置中设置characted-set-server

但是当你将mysql客户端连接到服务器时,你当前的charset可能是任何其他的,并且正确地将你通过连接发送的数据转换为服务器字符集,并将从服务器发送的数据转换回来作为响应,您应指定相应的client settings

SET character_set_client = charset_name;
SET character_set_results = charset_name;
SET character_set_connection = charset_name;

或客户端应用程序的mysql.ini中的相应设置。如果所有这些都相同,您可以使用较短的语句开始与服务器的通信:

SET NAMES 'charset_name' [COLLATE 'collation_name'];