Mysql 中文乱码问题解决办法
2009-04-01 12:28
627 查看
一、
Mysql 字符集。
• 字符集相关变量:
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
–
character_set_system:系统元数据(字段名等)字符集
其中在解决乱码问题中最关键的三个变量是:
character_set_client、 character_set_connection、character_set_results。
character_set_client指定的是Sql语句的编码,如果设置为 binary,mysql就当二进制来处理,character_set_connection指定了mysql 用来运行sql语句的时候使用的编码,也就是说,程序发送给MySQL 的SQL语句,会首先被MySQL从character_set_client指定的编码转换到character_set_connection指定的 编码,如果character_set_clien指定的是binary,则MySQL就会把SQL语句按照 character_set_connection指定的编码解释执行.
当执行SQL语句的过程中,比如向数据库中插入字段的时候,字段也有编码设置,如果字段的编码设置和character_set_connection指定的不同,则MySQL 会把插入的数据转换成字段设定的编码。SQL语句中的条件判断和SQL插入语句的执行过程类似.
当SQL执行完毕像客户端返回数据的时候,会把数据从字段指定的编码转换为character_set_results指定的编码,如果character_set_results=NULL
则不做任何转换动作,(注意这里设置为NULL不等于没有设置,没有设置的时候MySQL会继承全局设置)。 具体过程可参见图1:
图1
• SHOW VARIABLES LIKE 'character%’;
• SHOW VARIABLES LIKE 'collation%’;
• SQL函数HEX、LENGTH、CHAR_LENGTH
• SQL函数CHARSET、COLLATION
使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8
(2) 还有一种修改字符集的方法,就是使用mysql的命令
二、
实例。
例:在Mysql执行以文本方式存储的脚本代码,用select 语句查询时发现中文全变成了乱码。
解决方法:把文本文档的存储类型设为utf-8,设置SET character_set_client = utf8 ; character_set_connection = utf8 ;
SET character_set_results = gbk ;
再用select语句查询就可以看到中文了。
Mysql 字符集。
• 字符集相关变量:
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
–
character_set_system:系统元数据(字段名等)字符集
其中在解决乱码问题中最关键的三个变量是:
character_set_client、 character_set_connection、character_set_results。
character_set_client指定的是Sql语句的编码,如果设置为 binary,mysql就当二进制来处理,character_set_connection指定了mysql 用来运行sql语句的时候使用的编码,也就是说,程序发送给MySQL 的SQL语句,会首先被MySQL从character_set_client指定的编码转换到character_set_connection指定的 编码,如果character_set_clien指定的是binary,则MySQL就会把SQL语句按照 character_set_connection指定的编码解释执行.
当执行SQL语句的过程中,比如向数据库中插入字段的时候,字段也有编码设置,如果字段的编码设置和character_set_connection指定的不同,则MySQL 会把插入的数据转换成字段设定的编码。SQL语句中的条件判断和SQL插入语句的执行过程类似.
当SQL执行完毕像客户端返回数据的时候,会把数据从字段指定的编码转换为character_set_results指定的编码,如果character_set_results=NULL
则不做任何转换动作,(注意这里设置为NULL不等于没有设置,没有设置的时候MySQL会继承全局设置)。 具体过程可参见图1:
图1
二、检测字符集问题的一些手段
• SHOW CHARACTER SET;• SHOW VARIABLES LIKE 'character%’;
• SHOW VARIABLES LIKE 'collation%’;
• SQL函数HEX、LENGTH、CHAR_LENGTH
• SQL函数CHARSET、COLLATION
使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8
+--------------------------+---------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:"mysql-5.0.37"share"charsets" | +--------------------------+---------------------------------+ |
mysql> SET character_set_client = utf8 ; mysql> SET character_set_connection = utf8 ; mysql> SET character_set_database = utf8 ; mysql> SET character_set_results = utf8 ; mysql> SET character_set_server = utf8 ; mysql> SET collation_connection = utf8 ; mysql> SET collation_database = utf8 ; mysql> SET collation_server = utf8 ; |
实例。
例:在Mysql执行以文本方式存储的脚本代码,用select 语句查询时发现中文全变成了乱码。
解决方法:把文本文档的存储类型设为utf-8,设置SET character_set_client = utf8 ; character_set_connection = utf8 ;
SET character_set_results = gbk ;
再用select语句查询就可以看到中文了。
相关文章推荐
- navicat8 连接mysql,查看UTF8中文乱码问题解决办法
- jsp和servlet操作mysql中文乱码问题的解决办法
- MySQL客户端输出窗口显示中文乱码问题解决办法
- MySQL客户端输出窗口显示中文乱码问题解决办法
- MySQL中文乱码问题解决办法
- MySQL插入数据中文乱码问题解决办法
- MySQL客户端输出窗口显示中文乱码问题解决办法
- MySQL客户端输出窗口显示中文乱码问题解决办法
- mysql中文乱码问题解决办法
- web 前端:连接mysql中文乱码问题的解决办法
- mysql中文乱码问题解决办法
- jsp和servlet操作mysql中文乱码问题的解决办法
- MySQL客户端输出窗口显示中文乱码问题解决办法
- mysql5.0 ,Navicate Lite 中文乱码问题解决办法
- 解决MySQL客户端输出窗口显示中文乱码问题的办法
- 常见php与mysql中文乱码问题解决办法
- jsp和servlet操作mysql中文乱码问题的解决办法