mysql导入gbk数据乱码解决方案
最近想把本地测试系统数据库中的数据导入线上服务器,我把用phpmyadmin把表导成sql文件quancha.sql,然后使用
mysql -u quancha -p quancha1114< quancha.sql
导入数据。
本以为一切ok,可是用程序一查出来的中文都是??乱码。
分析一下因为我的数据使用的是gbk编码,而phpmyadmin导出的sql文件是utf-8编码的,我把sql文件转成gbk的再试也不行。
然后我就怀疑是数据库的问题,使用
>status
看了下数据库编码是latin1,我又去改/etc/mysql/my.cnf改成
[mysqld]
default-character-set=gbk
...
[client]
default-character-set=gbk
重启mysql服务
service mysql restart
修改数据库编码为gbk
alter database databasename character set gbk;
然后设置客户端为gbk
set names gbk;
导入反复再试,还是不行,崩溃了...
最后看了下phpmyadmin导出的sql文件,其中有这么一段
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
这个是phpmyadmin自动添加的,它把编码设置成utf8来导入了。
把这几行删除之后,再试。
这个世界恢复太平了。中文正常显示了。
--------
ad一下 提供手机号归属地数据库 包括2g,3g所有号码269168万门数据。
导入的sql内容
set names gbk;
CREATE TABLE IF NOT EXISTS meta
(
module
varchar(80) NOT NULL,
title
varchar(200) NOT NULL,
keywords
varchar(200) NOT NULL,
description
varchar(200) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
--
-- 导出表中的数据 meta
--
INSERT INTO meta
(module
, title
, keywords
, description
) VALUES
('Downurl', '下载地址转换,迅雷,快车,旋风地址转换器 - 全查工具箱 ', '下载地址,转换,迅雷,快车,旋风,地址转换器', '下载地址,转换,迅雷,快车,旋风,地址转换器'),
('Ip', 'IP地址查询|全查工具箱', 'IP地址查询', '最新IP地址查询,每日更新'),
('Sfz', '身份证归属地查询 | 全查网', '身份证归属地查询,身份证雁阵', '提供身份证号码,身份证查询,身份证号码查询验证,并有效识别身份证真伪');