mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。
中文乱码
无法插入中文字符。
查看表字符编码。
我们可以看到表的默认字符集是latin1
所以我们在创建表的时候就需要指定表的字符集:
这样在Linux里面可以访问并且可以插入与访问这个表了。
虽然在服务器端可以显示中文正常,但是在客户端可能会显示乱码。因为我们的服务器是UTF8。
1、修改配置文件,在其中分别加入以下,重启数据库[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
2、查看系统字符集
cat /etc/sysconfig/i18n 修改这个文件就可以实现修改系统字符集
LANG=en_USUTF-8
3、
临时试修改字段字符集,然后查询数据看能否正常显示
set names utf8; (会话级别的修改不会影响实际数据)1 myini 里的 default-character-set 设置成 gbk;
2 将dbopt 中 default-character-set 设置成 gbk;
3 将dbopt中 default-collation设置成 gbk_chinese_ci;命令行显示乱码没关系 只要查出来显示不是乱码即可
鉴于 有设置语言:GBK 建议你用比记事本强大的编辑器 将SQL文件打开 另存为时 编码选择 GBK 试一下
如果不行 建议都用utf-8 乱码问题麻烦 有一条就是保证输入输出一致 这样至少查询出来的 基本没大问题只有让他们修改好自己的数据库编码,然后再导出了
[补充]
mysql导出的脚本里面可以设置字符集,如下例子
-- MySQL dump 1011
--
-- Host: localhost Database: storage
-- ------------------------------------------------------
-- Server version 5067-community-nt
/!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 /;
但是关键是现在别人导出的脚本里已经是中文乱码了,你这里如论如何也还原不了了即使现在这个长度问题解决了,那么导到你库里的乱码问题怎么解决
所以,最好办法还是让对方检查下他那边字符集问题,再导出即可
不管用什么字符集导出都成,
最后你这里改成 /!40101 SET NAMES gbk /;
导进来即可
字符集的问题啊,,,,很头疼啊,,以前俩oracle数据库导数据因为这个问题吃尽苦头了 上G的数据啊,导一次几十分钟
上百万条全是乱码数据,,,差点没哭了当时方法一: 通过增加参数 –default-character-set = utf8 解决乱码问题
mysql -u root -p password < path_to_import_file –default-character-set = utf8
方法二: 在命令行导入乱码解决
1 use database_name;
2 set names utf8; (或其他需要的编码)
3 source examplesql (sql文件存放路径)
方法三: 直接粘贴sql文件里的代码
1 打开SQLyog客户端软件;
2 定位到SQL编辑器,然后用记事本打开刚刚导出的SQL文件;
3 复制文件中所有SQL语句到SQL编辑器当中,执行这些SQL代码;
方法四: 用记事本或其他文本工具改变SQL文件的编码格式(若方法三不行,那就尝试方法四)
1 用记事本(或UE)打开刚才的导出的SQL文件;
2 另存此文件——打开另存为对话框,选择对话框中的编码格式为UNICODE编码;
3 保存文件,然后CTRL+A,全选;
4 复制里面的SQL语句到SQLyog中的“SQL编码器”当中,再执行一次SQL语句;
5 执行完成后切记刷新一次,查看中文的数据表,乱码消除,大功告成;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)