设为首页 收藏本站
查看: 844|回复: 0

[经验分享] MySQL字符乱码解决方案

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-23 09:05:50 | 显示全部楼层 |阅读模式
1、字符集对应查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
mysql> show  character  set;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
| cp850    | DOS West European           | cp850_general_ci    |      1 |
| hp8      | HP West European            | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                    | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |
| greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |
| cp1250   | Windows Central European    | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                 | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |
| macce    | Mac Central European        | macce_general_ci    |      1 |
| macroman | Mac West European           | macroman_general_ci |      1 |
| cp852    | DOS Central European        | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode               | utf8mb4_general_ci  |      4 |
| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode              | utf16_general_ci    |      4 |
| cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode              | utf32_general_ci    |      4 |
| binary   | Binary pseudo charset       | binary              |      1 |
| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |
+----------+-----------------------------+---------------------+--------+
39 rows in set (0.00 sec)




2.查看字符集变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> show  variables  like '%char%';
+--------------------------+-------------------------------------+
| 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       | /app55/mysql-5.5.45/share/charsets/ |
+--------------------------+-------------------------------------+
8 rows in set (0.00 sec)




3.乱码原因

1
2
3
4
5
6
7
8
9
客户端字符集
character_set_client
character_set_connection
character_set_results
数据库字符集:
Character_set_server
character_set_database
character_set_system
这两种字符集不相同导致。



4.解决字符集乱码
1).已经有数据库,但是插入数据时乱码,需要如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> show  create  database  virtual;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| virtual  | CREATE DATABASE `virtual` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> use  virtual;
Database changed
mysql> show  create  table user;
+-------+-----------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                          |
+-------+-----------------------------------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)



1
操作前,先set names库和表的character。





2).
没有数据库,那么在建立数据库的时候指定数据库格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> create database test default character set gbk collate gbk_chinese_ci;
mysql> create   table  user  (id  int not null,name  varchar(20));
mysql> show  create table  user;
+-------+----------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                         |
+-------+----------------------------------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
  
默认继承数据库的字符集
+-------+----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
然后,
set  names  ‘gbk’,
再次操作。





3).直接导入sql文件,怎么解决乱码

1
2
3
4
5
  3.1 sql文件中,加上set names utf8
  3.2 mysql>set names utf8;
      mysql>source file.sql
  3.3 mysql命令使用--default-character-set=utf8 导入sql文件
  Mysql –uadmin –p’jidian123’ –S /mydata/mysql.sock –default-character-set=utf8



5.set names ‘utf8’ —default-character-set=utf8具体干了些什么?

1
2
3
4
5
它们都干了相同的事,把下面3个变量的值变成和要操作的数据库字符集相同了。
character_set_client     | utf8                                | character_set_connection | utf8                           
  
                  |
| character_set_results    | utf8



                           |


6、结论
字符集乱码问题受4个东西影响。
1
)客户端字符集,3个字符集受Linux系统字符集影响。

1
2
3
character_set_client
character_set_connection
character_set_results



2)要操作的数据库的字符集

1
Show  create  database test;



3)要操作的数据表的字符集

1
2
Use  test;
Show  create  table  user



7.更改配置文件
客户端字符集,编辑my.cnf

1
2
3
4
vi /etc/my.cnf
[client]
default-character-set = utf8     <===set names 'utf8'
注意:客户端修改字符集不需要重启服务器



服务端字符集,编辑my.cnf

1
2
3
4
5
6
vi /etc/my.cnf
[mysqld]
default-character-set = utf8       mysql5.1   
character-set-server = utf8        mysql5.5
  
注意:服务端修改字符集需要重启服务器



8大结论:
1linux服务器字符集

1
2
3
4
5
6
7
8
CentOS6
系列
vi /etc/sysconfig/i18n
LANG="en_CN.UTF-8"
CentOS7
系列
vi  /etc/locale.conf
LANG="en_CN.UTF-8"




2linux客户端字符集

1
2
secureCRT
工具




3MySQL服务器字符集配置
永久生效
vi  /etc/my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[mysqld]
default-character-set=utf8    mysql5.1
版本
character-set-server=utf8     mysql5.5
版本
重启服务器
提示:
更改后变化的变量
mysql> show  variables  like 'char%';
+--------------------------+-------------------------------------+
| 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       | /app55/mysql-5.5.45/share/charsets/




4MySQL客户端字符集配置
临时生效:

1
2
1、set names 'utf8'
2、mysql -uadmin -p -S /mydata/mysql.sock --default-character-set=utf8



提示:
更改后受影响的变量

1
2
3
4
5
6
7
8
9
10
11
12
mysql> show  variables  like 'char%';
+--------------------------+-------------------------------------+
| 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       | /app55/mysql-5.5.45/share/charsets/



永久生效

1
2
3
vi /etc/my.cnf
[client]
default-character-set = utf8



提示:
不需要重启服务器,数据证明一切。 并且客户端字符集不会再受linux字符集的影响了。

9.生成环境更改字符集
对已有数据的数据库进行字符集转变,没有没有作用。只能导出数据,重新建库建表。

1
2
3
4
改库:
alter database character set 'ut8';
改表:
alter table  character set 'utf8';




生产环境更改字符集方法:latin1 utf8
1
)导出表结构

1
2
mysqldump -uadmin -p'jidian123' -S /mydata/mysql.sock -d virtual >virtual_bak.sql
sed -i 's/latin1/utf8/g'   virtual_bak.sql



2.建库

1
create  database virtual default character set utf8 collate utf8_general_ci;



3.更改MySQL默认字符集

1
2
3
4
5
6
7
[client]
default-character-set = utf8
[mysqld]
character-set-server = utf8       mysql5.5
配置
default-character-set = utf8     mysql5.1
配置




重启数据库

4.
导入数据

1
mysql -uadmin -p'jidian123' -S /mydata/mysql.sock  virtual < virtual_bak.sql



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155019-1-1.html 上篇帖子: mysql配置主从时报错及处理 下篇帖子: mysql更改数据库目录提示“ERROR 2002 (HY000): '/var/lib/mysql/mysql.sock' (2)” 解决方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表