【问题标题】:MySQL and UTF-8MySQL 和 UTF-8
【发布时间】:2009-12-19 16:48:45
【问题描述】:

在MySQL中,做和做有什么区别:

SET NAMES 'utf8'

还有:

SET CHARACTER SET 'utf8'

我查看了Connection Character Sets and Collations MySQL documentation page,但我仍然有点困惑...是否需要发出这两个命令才能使 MySQL UTF-8 感知?还是is SET NAMES enough

【问题讨论】:

标签: sql mysql unicode utf-8


【解决方案1】:

设置名称

SET NAMES 表示客户端将使用什么字符集向服务器发送 SQL 语句。这意味着SET NAMES 'cp1251' 告诉服务器“来自该客户端的未来传入消息的字符集为 cp1251。”它还指定服务器用于将结果发送回客户端的字符集。

设置字符集

SET CHARACTER SET 类似于SET NAMES,但将character_set_connectioncollation_connection 设置为character_set_databasecollation_database。一个SET CHARACTER SET x 语句相当于这三个语句:

SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;

是否需要发出这两个命令才能使 MySQL UTF-8 感知?还是 SET NAMES 就够了?

SET NAMES 就足够了。

【讨论】:

  • 请记住,SET NAMES 不会通知客户端库 (libmysql.dll) 有关字符编码的更改。这可能会影响 mysql_real_escape_string() 等客户端库函数的结果。如果您的应用程序依赖于 real_escape_string(),您应该在 API 中寻找一个函数/方法,该函数/方法还负责编码的客户端方面。对于将是 dev.mysql.com/doc/refman/5.0/en/mysql-set-character-set.html 的 C API,对于 php-mysql docs.php.net/mysql_set_charset
  • @VolkerK:感谢mysql_set_charset() 链接,是否有等效的 PDO?
【解决方案2】:

SET NAMES 具有连接编码,而 SET CHARACTER SET 是表编码。强烈建议同时使用这两个命令,以避免可怕的包机问题...

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2011-02-26
    • 2013-07-07
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多