解决mysql中文乱码(总)
转自:http://hi.baidu.com/cnvienna/blog/item/2e99efdfd94fc61862279801.html
MySQL会出现中文乱码的原因不外乎下列几点:
.server本身设定问题,例如还停留在latin1
.table的语系设定问题(包含character与collation)
.客户端程式(例如php)的连线语系设定问题 强烈建议使用utf8!!!! utf8可以兼容世界上所有字符!!!! 一、避免创建数据库及表出现中文乱码和查看编码方法 、创建数据库的时候:CREATE DATABASE `test`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
、建表的时候 CREATE TABLE `database_user` (
`ID` varchar() NOT NULL default '',
`UserID` varchar() NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。 但是如果你已经建了库和表可以通过以下方式进行查询。 .查看默认的编码格式: mysql> show variables like "%char%";
+--------------------------+---------------+
| Variable_name | Value |
+--------------------------+---------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+-------------+
注:以前2个来确定,可以使用set names utf8,set names gbk设置默认的编码格式; 执行SET NAMES utf8的效果等同于同时设定如下:
SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8'; .查看test数据库的编码格式: mysql> show create database test;
+------------+------------------------------------------------------------------------------------------------+
| Database | Create Database |
+------------+------------------------------------------------------------------------------------------------+
| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET gbk */ |
+------------+------------------------------------------------------------------------------------------------+ .查看yjdb数据库的编码格式: mysql> show create table yjdb; | yjdb | CREATE TABLE `yjdb` (
`sn` int() NOT NULL AUTO_INCREMENT,
`type` varchar() NOT NULL,
`brc` varchar() NOT NULL,
`teller` int() NOT NULL,
`telname` varchar() NOT NULL,
`date` int() NOT NULL,
`count` int() NOT NULL,
`back` int() NOT NULL,
PRIMARY KEY (`sn`),
UNIQUE KEY `sn` (`sn`),
UNIQUE KEY `sn_2` (`sn`)
) ENGINE=MyISAM AUTO_INCREMENT= DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC | 二、避免导入数据有中文乱码的问题 :将数据编码格式保存为utf- 设置默认编码为utf8:
set names utf8; 设置数据库db_name默认为utf8:
ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 设置表tb_name默认编码为utf8:
ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 导入:
LOAD DATA LOCAL INFILE 'C:\\utf8.txt' INTO TABLE yjdb; :将数据编码格式保存为ansi(即GBK或GB2312) 设置默认编码为gbk:
set names gbk; 设置数据库db_name默认编码为gbk:
ALTER DATABASE `db_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; 设置表tb_name默认编码为gbk:
ALTER TABLE `tb_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; 导入:
LOAD DATA LOCAL INFILE 'C:\\gbk.txt' INTO TABLE yjdb; 文件转换:(gb2312 -> utf-) iconv -t utf- -f gb2312 -c search.dat > search22.dat 注:.UTF8不要导入gbk,gbk不要导入UTF8;
.dos下不支持UTF8的显示;
三、解决网页中乱码的问题 将网站编码设为 utf-,这样可以兼容世界上所有字符。 如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为 GBK, GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK。 .编辑/etc/my.cnf ,在[mysql]段加入default_character_set=utf8; .在编写Connection URL时,加上?useUnicode=true&characterEncoding=utf-8参; .在网页代码中加上一个"set names utf8"或者"set names gbk"的指令,告诉MySQL连线内容都要使用 utf8或者gbk; 作者: www.quicklinux.org
邮件: support@quicklinux.org
MySQL4.1是比较烦人.支持多语言的细化设置.再加上PhpMyadmin-.6也比较笨.默认就是改不动的UTF-.怎么弄都乱码.好了.废话少说.我们来一步步解决这个问题:
. 修改/etc/my.cnf文件.改成如下内容:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
注意.就是加入了一句: default-character-set=utf8
. 命令 /etc/init.d/mysqld restart 重新启动MySQL.
. 打开PhpMyadmin. 选择Lang为"Chines simplifies(zh-utf-8)". 选择"MySQL连接校对为utf8_general_ci". 点"服务器变量和设置". 可以看到:
character set client utf8 utf8
character set connection utf8 utf8
character set database utf8 utf8
character set results utf8 utf8
character set server utf8 utf8
character set system utf8 utf8
collation connection utf8_general_ci utf8_general_ci
collation database utf8_general_ci utf8_general_ci
collation server utf8_general_ci utf8_general_ci
从这里可以看到character全部变成UTF-8了.
为什么都要改成UTF-8呢?改成GB2312不行吗?解释如下:
我也不想改成UTF-. 只是PhpMyadmin .6在MySQL .1的时候只会用UTF-. 连其他页面的charset也都是UTF-. 改成GB23122一定会乱码. 我们只能凑PhpMyadmin了. 只有在MySQL .23的时候PhpMyadmin才会多一个GB2312的页面charset.这时候是正常的.
. 将以前的MySQL .23的库文件导入MySQL .1的库.有两种情况:
一是从PhpMyadmin上导入. 这时候你要注意的是在选择库文件的页面左下脚有个"文件的字符集:". 默认是UTF-. 要改成Gb23122. 否则导进去乱码.
二是在Linux下导入.这时候你需要先在库文件的头部加一行:
SET NAMES 'gb2312';
注意最后也是;号. 别漏了. 然后执行: MySQ -u 用户名 -p 密码 xxx.sql > 库名
导入完成以后再用PhpMyadmin打开看. 里面的中文字就是正确的.
.从MySQL .1里导出库文件
一.用PhpMyadmin导出.导出倒是问题不大.如果PhpMyadmin的浏览页面里显示的中文是正常的.那么导出肯定也是正常的.
二.在Linux上导出.如果用mysqldump导出出现了乱码也没有关系.可以运行iconv来转换一下:
iconv -c -f UTF- -t GB2312 库文件名 > 新的Gb2312的库文件名
综上所述.需要注意:
. 尽量在需要导入的库文件的开头加入 SET NAMES 'Gb2312'; 告诉MySQLl你要导入的是一个Gb2312的文件. . 可能你需要这个: SET NAMES 'utf8'; 在登陆到MySQL后用. . 把character的一些默认参数改到UTF-8上.有时可以减少一些困扰.不过也不是必须的. . 在MySQL上使用: SHOW VARIABLES LIKE 'character_set_%'; 用来查看当前的状态. . 如果出现乱码也不要怕.一是你要注意留存原有的备份.二是用iconv来进行转化.
解决mysql中文乱码(总)的更多相关文章
- PHP彻底解决mysql中文乱码
彻底解决mysql中文乱码 mysql是我们项目中非经常常使用的数据型数据库. 可是由于我们须要在数据库保存中文字符,所以经常遇到数据库乱码情况.以下就来介绍一下怎样彻底解决数据库中文乱码情况. 数据 ...
- 总结--解决 mysql 中文乱码
首先分析一下导致mysql 中文乱码的原因: 1.建表时使用了latin 编码 2.连接数据库的编码没有指定 3.写入时就已经乱码(这种情况需要自己检查源数据了) 解决方法总结: 1.创建库时指定编码 ...
- 解决mysql中文乱码问题?
mysql是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1.中文乱码 1.1.中文乱码 cre ...
- 彻底解决mysql中文乱码
mysql是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1.中文乱码 1.1.中文乱码 cre ...
- 彻底解决mysql中文乱码的办法 ???
MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如还停留在latin12.table的语系设定问题(包含character与collation)3.客户端程式(例如p ...
- 彻底解决mysql中文乱码的办法,修改mysql解压缩版(免安装版或zip版)字符编码
MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如server字符编码还停留在latin12.table的语系设定问题(包含character与collation)3.客 ...
- 解决Mysql中文乱码问题的方案
MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例如还停留在latin12.table的语系设定问题(包含character与collation)3.客户端程式(例如ph ...
- win10 系统解决mysql中文乱码问题
问题: 向mysql 数据库插入数据是,出现中文乱码(中文均显示为‘??’) 原因: mysql 默认的字符集是latin1,所以我么需要改为ut8编码才可以 解决: 1.以管理员权限运行cmd窗口 ...
- 解决MySQL中文乱码的问题
遇到中文乱码问题,首先用status命令检查数据库的配置,如下: 上图会显示数据库配置的各项信息. 还可以用 show create database XXX,来显示创建数据库的时候的编码设置. 一般 ...
随机推荐
- hdu 3092 Least common multiple
思路: 容易知道,分解成素数的lcm肯定是最大的,因为假设分解成2个合数,设定x为他们的 最大公约数, 那么他们的最小公倍数就要减少x倍了 然后如果是素数之间的最小公倍数,那么就只是他们的乘积,同样的 ...
- strncpy 和 strcpy的区别 (要抽时间重点看,未完待续)
strcpy的实现: //GNU-C中的实现(节选): */ char* strcpy(char *d, const char *s) { char *r=d; while((*d++=*s++)); ...
- Cpp多重继承会产生的问题
多重继承常常被认为是 OOP 中一种复杂且不必要的部分.多重继承面临 crash 的场景并非难以想象,来看下面的例子. 1. 名称冲突 来看以下情况: 如果 Dog 类以及 Bird 类都有一个名为 ...
- JavaPersistenceWithHibernate第二版笔记Getting started with ORM-002Domain层详解及M etaModel
一.结构 二.配置文件约定 The JPA provider automatically picks up this descriptor if you place it in a META-INF ...
- 编写基于outlook显示的html邮件需要注意的问题
outlook对于html的支持是有限制的,在编写这些html的时候注意遵循以下规则: Never use colspans or rowspans. Always set correct dimen ...
- Netty4.x中文教程系列(二) Hello World !
在中国程序界.我们都是学着Hello World !慢慢成长起来的.逐渐从一无所知到熟悉精通的. 第二章就从Hello World 开始讲述Netty的中文教程. 首先创建一个Java项目.引入一个N ...
- 2、Spring的LocalSessionFactoryBean创建过程源码分析
spring的LocalSessionFactoryBean生成过程与hibernate的SessionFactory生成过程是高度吻合的. 为了后面源码分析,首先讲解一个接口,一个类的功能:①.接口 ...
- 易犯的PHP小错误及相应分析
变量声明如果在一条语句中声明一个变量,如下所示:$var = 'value'; 编译器首先会求出语句右半部分的值,恰恰正是语句的这一部分常常会引发错误.如果使用的语法不正确,就会出现解析错误. 解析错 ...
- redis 2.4异常
最近公司redis服务出现了异常,记录下教训: redis异常后:观察redis服务,可以看到redis cpu占用100% 用strace命令查看redis进程,显示如下: open("/ ...
- Android之网络请求库
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...