0 0

mysql中character_set_client和result必须相同吗?10

我们使用php或者其他客户端访问时一般会直接使用set names 'utf8',这样client和result就会同时为utf8,不会出现什么问题。但如果character_set_client和character_set_result不相同的话会很容易出现乱码,那么这两个就必须要相同喽?是吗?

如果确实要相同的话,为什么要拆成两个变量呢?

另外,character_set_connection又有什么特殊作用呢?为什么特殊拿出来呢?

比如字符集转换的过程:character_client => connection => server/database ,中间为什么要添加一个connection字符集呢,为什么不直接从client => server/database呢?
问题补充:
引用
因为character_set_client变量并不作为接收显示时使用的字符集,只有character_set_results才作为显示时使用的字符集,所以需要将其拆成两个变量。


这个我知道,但是一般情况下你不应该将客户端发送的数据和发送给客户端的数据相同的字符集吗?

什么情况下需要将这两个设置成不一样的?如果没有这种情况,为什么要将这两个分开?
问题补充:
引用
2、要保证通讯的字符集与数据库的字符集一致,即character_set_client,character_set_connection与character_set_database一致;


不是吧,比如使用windows的cmd操作mysql数据库,向其中插入汉字。我的数据库是utf8的字符集,但因为cmd窗口默认的字符集是gbk,所以我要设置client为gbk,这样字符集由gbk=>utf8转换,才能被数据库正常使用。因此,client不一定要跟database一致。


在这个cmd上我设置了connection,看看他对乱码的影响。设置connection为任何支持中文的字符集,都不回对字符处理带来任何影响。同时得出结论,在client设置正确的情况下,设置connection为任何支持传输的数据的字符集都可以。也不一定要跟client和database保持一致。

于是我感觉connection在这里好像多此一举,客户端查询时:client=>connection=>table/database,返回数据时:results<=connection<=table/database。
connection好像多此一举。
2009年2月09日 16:35

5个答案 按时间排序 按投票排序

0 0

您的思考与我的疑问一致,我后来想了想,大部分情况下,请示不需要connetion这个设置,除非是为了降低网络传输压力,将其设置为占用字节较少的字符集。

2015年1月26日 16:28
0 0

1、要保证数据库中存的数据与数据库编码一致,即数据编码与character_set_database一致;

2、要保证通讯的字符集与数据库的字符集一致,即character_set_client,character_set_connection与character_set_database一致;

3、要保证SELECT的返回与程序的编码一致,即character_set_results与程序编码一致;

4、要保证程序编码与浏览器编码一致,即程序编码与<meta http-equiv="Content-Type" content="text/html; charset=?"/>一致。


2009年2月13日 08:33
0 0

character_set_client,character_set_connection这两个变量仅用与保证与character_set_database编码的一致,而character_set_results则用与保证SELECT返回的结果与程序的编码一致。

例如,你的数据库(character_set_database)用的是utf8的字符集,那么你就要保证character_set_client,character_set_connection也是utf8的字符集。而你的程序也许采用的并不是utf8,比如你的程序用的是gbk,那么你若把character_set_results也设置为utf8的话就会出现乱码问题。此时你应该把character_set_results设置为gbk。这样就能保证数据库返回的结果与你的程序的编码一致。

2009年2月13日 08:33
0 0

character_set_client:客户端发送过来文字的字符集
character_set_results:发送给客户端的结果所使用的字符集
character_set_connection:用于连接的字符集

2009年2月10日 15:24
0 0

因为character_set_client变量并不作为接收显示时使用的字符集,只有character_set_results才作为显示时使用的字符集,所以需要将其拆成两个变量。

character set是一组符号和他们对应的编码;collation是一组规则,规定了字符之间如何比较(大小)。每一个character set都对应着一组(至少一个)collation,而每一个collation对应唯一一个character set,通常他们两个需要成对出现,已完成数据库里的相关操作,比如排序,字符串连接等操作。

在上述四个级别上,对character set和collation都有默认的设置,server层的默认为latin1和latin1_swedish_ci.(ci:case insensible)。在创建各个层次的实体时都有相应的子句或者候选项可以使用,以显式的声明各个实习将要使用的字符集和校对集。




2009年2月10日 15:23

相关推荐

Global site tag (gtag.js) - Google Analytics