当前位置:  数据库>mysql

MySQL的中文UTF8乱码问题

    来源: 互联网  发布时间:2014-09-06

    本文导语:  从MySQL支持Unicode后,为了与时俱进,我们的web程序也开始考虑用UTF8了。其实UTF8也用了好几年了,程序基本能跑,没什么大问题,但是数据倒换的时候,总是遇到不爽的事情。 【问题现象】 网页xxx.php用EditPlus另存为UTF8格式,My...

从MySQL支持Unicode后,为了与时俱进,我们的web程序也开始考虑用UTF8了。其实UTF8也用了好几年了,程序基本能跑,没什么大问题,但是数据倒换的时候,总是遇到不爽的事情。

【问题现象】

网页xxx.php用EditPlus另存为UTF8格式,MySQL在my.ini里设置default-character-set=utf8,建表时加了CREATE TABLE `xxx ` (myname varchar(255)) ENGINE=MyISAM DEFAULT CHARSET=utf8,用xxx.php执行insert/update/select出来的都是中文,貌似没问题,但是用phpMyAdmin看select是乱码,用第三方工具软件(如SQLyog)看select也是乱码,mysqldump也是乱码,很不爽。当然,如果你建表的时候,选择了binary/varbinary/blob类型,不会发现乱码,因为指定的是二进制保存,MySQL保存数据时就没有编码的概念了。

【查找问题】

虽然在my.ini里设置default-character-set=utf8,但是执行以下命令时有新发现:

mysql> SHOW VARIABLES LIKE 'character%';

+----------------------------------------+-------------------------

| Variable_name            | Value

+----------------------------------------+-------------------------

| character_set_client       | latin1

| character_set_connection   | latin1

| character_set_database    | utf8

| character_set_filesystem    | binary

| character_set_results       | latin1

| character_set_server       | utf8

| character_set_system      | utf8

| character_sets_dir         | D:mysqlsharecharsets

+----------------------------------------+-------------------------

8 rows in set (0.00 sec)

 

mysql> SHOW VARIABLES LIKE 'collation_%';

+---------------------------------------+------------------

| Variable_name           | Value           

+---------------------------------------+------------------

| collation_connection     | latin1_swedish_ci

| collation_database       | utf8_general_ci 

| collation_server         | utf8_general_ci 

+--------------------------------------+------------------

3 rows in set (0.00 sec)

发现Value列里面不全是utf8,仍然有部分是latin1,比如其中的client和connection。那网页xxx.php的工作过程就是这样的啦:从xxx.php页面上输入汉字,因为xxx.php是UTF8编码的,所以xxx.php以UTF8格式转换输入的汉字,然后以UTF8提交给mysql,但是mysql的client和connection都是latin1的,而表是UTF8的,所以mysql存储时,先将xxx.php提交的汉字,转成latin1的格式,再转成UTF8字符格式存在表中。如果此时我们用第三方软件或者phpMyAdmin去select查看此表,而表中存储的数据是被latin1过的UTF8字符,出来的时候是以UTF8格式取的,当然看起来时乱码了。解决方法就是让所有过程都是UTF8的就可以了。

【解决问题】

1、从my.ini下手

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

default-character-set=utf8

以上3个section都要加default-character-set=utf8,平时我们可能只加了mysqld一项。

然后重启mysql,执行

mysql> SHOW VARIABLES LIKE 'character%';

mysql> SHOW VARIABLES LIKE 'collation_%';

确保所有的Value项都是utf8即可。

2、建表时加utf8,表字段的Collation可加可不加,不加时默认是utf8_general_ci了。

CREATE TABLE `tablename4` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`varchar1` varchar(255) DEFAULT NULL,

`varbinary1` varbinary(255) DEFAULT NULL,

PRIMARY KEY (`id`)

)  ENGINE=MyISAM  DEFAULT CHARSET=utf8

 

3、网页xxx.php保存时选择utf8编码,页头最好加上

header('conten-type:text/html;charset=utf-8');

在执行CRUD操作前先执行一下

mysql_query("set names utf8");

测试代码xxx.php如下:


    
 
 

您可能感兴趣的文章:

  • jsp中文乱码 jsp mysql 乱码的解决方法
  • 编程语言 iis7站长之家
  • Apache 1.3.22/Tomcat 4.0.4/Mysql 3.23/mm.mysql.jdbc-2.0pre5的中文乱码问题
  • windows环境下Mysql中文乱码问题解决方法
  • mysql query browser中文乱码的解决方法
  • linux下mysql乱码及javascript无效
  • cmd中MySQL中文数据乱码问题解决方法
  • DOS命令行窗口mysql中文显示乱码问题解决方法
  • java通过stock与mysql通信时出现乱码的问题
  • 解决php csv文件导入mysql中文乱码
  • mysql的乱码和赋权问题?
  • linu as4.0 下 mysql数据库插入时乱码问题!!!求高人解决!!!
  • mysql使用source 命令乱码问题解决方法
  • 解析mysql修改为utf8后仍然有乱码的问题
  • php连接mysql二种方法 mysql乱码问题
  • 解析MYSQL 数据库导入SQL 文件出现乱码的问题
  • mysql和phpmyadmin的乱码问题
  • mysql odbc字符集设置(中文显示乱码)
  • Linux下访问MYSQL数据库中数据时出现乱码问题
  • 解析Hibernate + MySQL中文乱码问题
  • mysql中文排序注意事项与实现方法
  • mysql 按中文字段排序
  • apache+tomcat3.2.3+mm.mysql+mysql3.22+jdk1.3.1中文问题,急!!!!分不够还可以再加..
  • mysql 不能插入中文问题
  • 让MySQL支持中文排序的实现方法
  • mysql 客户端不能输入中文?
  • 解决mysql不能插入中文Incorrect string value
  • mysql的中文问题
  • 我在安装LINUX 9简体中文版时,漏装了一个PHP-MYSQL的模块,那我现在该如何加装?
  • JBuilder中用MYSQL数据库,用中文进行条件查询时,查不出任和数据?
  • mysql导出导入中文表解决方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c++中关于#include <mysql/mysql.h>的问题?
  • linux 下mysql 以root和普通用户进入mysql的问题
  • 我的是mandrake8.2,已经安装了mysql,请教一个菜鸟问题,怎么操作才能进入mysql,然后建库!
  • 在线请教:linux下用MySQL C API 连接MySQL 4.1.12出现的连接问题,提示升级客户端!!!!!!
  • radius mysql问题 rlm_sql_mysql.so 这个文件我怎么都没有找到
  • mysql安装问题菜鸟问题
  • java 和 mysql的问题?初级问题!
  • mysql4.0升级到mysql5(4.1),解决字符集问题
  • MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)
  • 关于mysql的问题
  • MySQL的用户问题,菜鸟提问
  • 重新restore了mysql到另一台机器上后mysql 编码问题报错
  • Centos 6.3将Mysql 5.1.61升级为mysql 5.6.19遇到的问题及解决方式
  • Cygwin连接MySQL问题
  • 请教mysql的问题
  • 关于linux中MySql的安装问题
  • Linux9.0下安装MySQL的问题(在线等)急!
  • 新手求助,关于安装MYSQL的问题!!!
  • 求助~~Linux安装mysql中的问题
  • 关于MySQL的启动问题?在线等待
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • Mysql查询错误:ERROR:no query specified原因
  • MySQL 重装MySQL后, mysql服务无法启动
  • php安装完成后如何添加mysql扩展
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin
  • MySQL Workbench的下载安装与使用教程


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3