[size=medium]Mysql对于字符集的支持细化到[color=red]四个层次[/color]:
1、服务器级(server);
2、数据库级(database);
3、数据表级(table);
4、字段级(column);
注:前三种均为默认设置,并不代码你的字段最终会使用这个字符集设置。[color=blue]以低层次为主。[/color]MySQL中关于连接环境的字符集设置有 Client端,connection, results 通过这些参数,MySQL就知道你的客户端工具用的是什么字符集,结果集应该是什么字符集。这样MySQL就会做必要的翻译,一旦这些参数有误,自然会导致字符串在转输过程中的转换错误。基本上99%的乱码由些造成。
1.可以使用[color=blue]show create table TableName[/color] 或 [color=blue]show full columns from tableName[/color]检查当前表中字段的字符集设置。
2.查看系统的字符集 [color=blue]show variables like 'char%'[/color]
mysql> show variables like 'char%';
+--------------------------+----------------
| Variable_name | Value
+--------------------------+----------------
| character_set_client | gbk
| character_set_connection | gbk
| character_set_database | latin1
| character_set_filesystem | binary
| character_set_results | gbk
| character_set_server | latin1
| character_set_system | utf8
| character_sets_dir | C:/Program File
+--------------------------+----------------
8 rows in set (0.00 sec)
备注:
[color=blue]character_set_client(客户端来源数据使用的字符集)
character_set_connection(连接层字符集)
character_set_database(当前选中数据库的默认字符集)
character_set_results(查询结果字符集)
character_set_server(默认内部操作字符集)
character_set_system(系统元数据<字段名等>字符集)[/color]
Mysql的字符集转换过程
(1).Mysql server收到请求时将数据从character_set_client转换为character_set_connection
(2).进行内部操作前,将请求数据从character_set_connection转换为内部操作字符,方法:(采用低层次匹配原则)
使用每个数据字段的character set设定值(字段级)
若不存在,则使用对应数据表的character set设定值(数据表级)
若不存在,则使用对应数据库的character set设定值(数据库级)
如不存在,则使用character_set_server
(3).将操作结果从内部操作符转换为character_set_results
[color=blue]问题1:在mysql命令行中操作出现的中文乱码问题:[/color]
当我们在安装mysql数据时指定的编码方式为UTF8,并且创建的数据库也都指定了为utf8,但当我们在mysql的命令行中[color=red](注:在程序中或者其他一些客户端如:navicat中都没有问题的[/color])插入中文数据时,直接报错:
[color=red]Incorrect string value: '\xD6\xD0' for column 'name' at row 1[/color]
这主要是是WINDOWS下的命令行无法正常支持UTF8,我们此时可以通过:
[color=blue]set names gbk[/color]命令来设置,
这条命令其实同时修改了:character_set_client,character_set_connection,character_set_results, mysql客户端会自动将其正确录入转换为utf8存储
(如果你的这架MySQL中都为中文,则你可以在my.ini或my.cnf中加上或修改这个参数, 参数文件修改后需重启MySQL服务)
[color=darkred][mysql]
default-character-set=gbk[/color]
[color=blue]使用mysql的建议:[/color]
1.建立数据库/表和进行数据库操作尽量显示的指出使用的字符集,而不是依赖于Mysql的默认配置
2.数据库和连接字符都使用latin1时虽然大部分情况下都可以解决中文乱码问题,但缺点是无法以字符为单位来进行sql操作,一般情况下将数据库和连接字符都置为utf8.[/size]
1、服务器级(server);
2、数据库级(database);
3、数据表级(table);
4、字段级(column);
注:前三种均为默认设置,并不代码你的字段最终会使用这个字符集设置。[color=blue]以低层次为主。[/color]MySQL中关于连接环境的字符集设置有 Client端,connection, results 通过这些参数,MySQL就知道你的客户端工具用的是什么字符集,结果集应该是什么字符集。这样MySQL就会做必要的翻译,一旦这些参数有误,自然会导致字符串在转输过程中的转换错误。基本上99%的乱码由些造成。
1.可以使用[color=blue]show create table TableName[/color] 或 [color=blue]show full columns from tableName[/color]检查当前表中字段的字符集设置。
2.查看系统的字符集 [color=blue]show variables like 'char%'[/color]
mysql> show variables like 'char%';
+--------------------------+----------------
| Variable_name | Value
+--------------------------+----------------
| character_set_client | gbk
| character_set_connection | gbk
| character_set_database | latin1
| character_set_filesystem | binary
| character_set_results | gbk
| character_set_server | latin1
| character_set_system | utf8
| character_sets_dir | C:/Program File
+--------------------------+----------------
8 rows in set (0.00 sec)
备注:
[color=blue]character_set_client(客户端来源数据使用的字符集)
character_set_connection(连接层字符集)
character_set_database(当前选中数据库的默认字符集)
character_set_results(查询结果字符集)
character_set_server(默认内部操作字符集)
character_set_system(系统元数据<字段名等>字符集)[/color]
Mysql的字符集转换过程
(1).Mysql server收到请求时将数据从character_set_client转换为character_set_connection
(2).进行内部操作前,将请求数据从character_set_connection转换为内部操作字符,方法:(采用低层次匹配原则)
使用每个数据字段的character set设定值(字段级)
若不存在,则使用对应数据表的character set设定值(数据表级)
若不存在,则使用对应数据库的character set设定值(数据库级)
如不存在,则使用character_set_server
(3).将操作结果从内部操作符转换为character_set_results
[color=blue]问题1:在mysql命令行中操作出现的中文乱码问题:[/color]
当我们在安装mysql数据时指定的编码方式为UTF8,并且创建的数据库也都指定了为utf8,但当我们在mysql的命令行中[color=red](注:在程序中或者其他一些客户端如:navicat中都没有问题的[/color])插入中文数据时,直接报错:
[color=red]Incorrect string value: '\xD6\xD0' for column 'name' at row 1[/color]
这主要是是WINDOWS下的命令行无法正常支持UTF8,我们此时可以通过:
[color=blue]set names gbk[/color]命令来设置,
这条命令其实同时修改了:character_set_client,character_set_connection,character_set_results, mysql客户端会自动将其正确录入转换为utf8存储
(如果你的这架MySQL中都为中文,则你可以在my.ini或my.cnf中加上或修改这个参数, 参数文件修改后需重启MySQL服务)
[color=darkred][mysql]
default-character-set=gbk[/color]
[color=blue]使用mysql的建议:[/color]
1.建立数据库/表和进行数据库操作尽量显示的指出使用的字符集,而不是依赖于Mysql的默认配置
2.数据库和连接字符都使用latin1时虽然大部分情况下都可以解决中文乱码问题,但缺点是无法以字符为单位来进行sql操作,一般情况下将数据库和连接字符都置为utf8.[/size]