首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >character_set_connection的用途是什么?

character_set_connection的用途是什么?
EN

Stack Overflow用户
提问于 2013-04-18 20:05:03
回答 3查看 5.6K关注 0票数 19

只需阅读Stefan Gehrig对Is "SET CHARACTER SET utf8" necessary?的优秀回答,它在解释解释和运行查询w.r.t的各个阶段方面比MySQL的文档走得更远。字符集和排序规则,但是我仍然不能真正理解character_set_connection的用途,或者更具体地说,将语句从character_set_client转换为character_set_connection。

为什么不直接使用character_set_client进行查询,并在与列值进行比较时直接从character_set_client转码到列的字符集?这个中间阶段的目的是什么?手册中给出了比较文本字符串的示例,但是为什么您首先要这样做,更不用说在与character_set_client相反的character_set_connection中了?除非我对此的理解是错误的(比如"select 'somestr‘= 'somestr’from x")。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-06-24 13:00:18

这两者的不同之处在于,假设character_set_client是从客户端发送语句的字符集,因此服务器用来解释语句的字符集,而character_set_connection是服务器转换语句以进行处理的字符集。

如前所述,character_set_connection用于文本字符串的比较。然而,这并不意味着等式的两端都必须是文字字符串。例如:

代码语言:javascript
复制
WHERE column_name = 'literal_string'
     (charset col)  (charset connection)

如果列和连接的字符集不同,则比较是非法的,并将导致错误。

然后将结果(和和响应消息)编码到character_set_results中,以便发送回客户端。

票数 1
EN

Stack Overflow用户

发布于 2013-09-30 17:45:10

这是因为MySQL允许每个字符串字面值都有自己的字符集。也就是说,语句中的字符串文字字符集并不总是与语句中的字符串文字字符集相同。

请参阅手册中的页面:http://dev.mysql.com/doc/refman/5.5/en/charset-literal.html

票数 1
EN

Stack Overflow用户

发布于 2013-11-06 19:47:42

代码语言:javascript
复制
> <?php

// ... (create a connection to mysql) ...

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);

$re = mysql_query('SHOW VARIABLES LIKE "%character_set%";')or die(mysql_error());
while ($r = mysql_fetch_assoc($re)) 
{
    var_dump ($r); echo "<br />";
} 

exit;

?>

所有重要的变量现在都是utf-8,我们可以安全地在mysql_escape_string($var)中使用INSERT或SELECT,而不需要任何编码函数。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16082480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档