character-set-server
中default-character-set
与my.cnf
之间的区别是什么?我想设置MySQL与UTF8的连接,这两者似乎都有效。一个比另一个好吗?
答案 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_system
与character_set_server
或character_set_client
不同,并且您手动输入字符(作为数据库对象标识符,列值或两者)时,这些可能会在客户端的输出中显示不正确或输出本身可能格式不正确。在这种情况下,使用--default-character-set=system_character_set
启动mysql客户端 - 也就是说,将客户端字符集设置为与系统字符集匹配 - 应解决问题。
换句话说,character_set_server
和character_set_client
是mysqld
的设置,当default-character-set
是mysql
的设置时,其他客户端库会覆盖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'];