只需阅读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")。
谢谢。
发布于 2013-06-24 13:00:18
这两者的不同之处在于,假设character_set_client
是从客户端发送语句的字符集,因此服务器用来解释语句的字符集,而character_set_connection
是服务器转换语句以进行处理的字符集。
如前所述,character_set_connection
用于文本字符串的比较。然而,这并不意味着等式的两端都必须是文字字符串。例如:
WHERE column_name = 'literal_string'
(charset col) (charset connection)
如果列和连接的字符集不同,则比较是非法的,并将导致错误。
然后将结果(和和响应消息)编码到character_set_results
中,以便发送回客户端。
发布于 2013-09-30 17:45:10
这是因为MySQL允许每个字符串字面值都有自己的字符集。也就是说,语句中的字符串文字字符集并不总是与语句中的字符串文字字符集相同。
请参阅手册中的页面:http://dev.mysql.com/doc/refman/5.5/en/charset-literal.html
发布于 2013-11-06 19:47:42
> <?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,而不需要任何编码函数。
https://stackoverflow.com/questions/16082480
复制相似问题