mysql防止中文乱码小方法

时间:2022-07-01 20:24:39

mysql字符集介绍

包括两部分 字符集CHARACTER和校对规则COLLATION

              字符集是用来定义mysql字符串存储的方式

           校对规则是定义比较字符串的方式

如果数据库存的是多过语言,就用utf8,每个汉字三个字节

如果只需支持中文,就用gbk,中英文都是占用2字节

查看mysql的字符集

show character set;
简写: show char set;

查看现有数据库编码设置

mysql> show variables like '%chara%';

| 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                          |

如果mysql不指定的话,客户端的字符集一般和系统一致

防止乱码方法小结

不乱码的思想:

Linux系统  客户端  服务端  库 表  程序

需要控制以上流程编码一致,防止乱码

查看 编码设置:

Show global variables like%chara%’;

一.Linux系统

[root@www ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

二.mysql客户端

登录mysql 先做set names latin1; 这里的字符设置,要根据要插入表的字符编码,查看方法:(show create table tablename \G),然后再执行更新语句,或者插入中文。

  1. 在要执行的sql文件里,第一条添加 set names latin1;
  2. 通过mysql指定编码导入

Mysql –uroot –p’密码’ --default-charset-set=latin1  test  < test.sql;

三.mysql服务端

  1. 在配置文件my.cnf里指定编码 重启生效 永久生效
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
default-character-set=utf8(5.1之前的版本)
character-set-server=uft8 (适合5.5)  中文还是选择utf8

四.库和表

       创建库和表的时候指定默认的字符编码

CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;

create table my_table (name varchar(20) not null default '') default charset utf8;

对于已有数据的表,修改字符集的思路

例如:latin1=>utf8

  1. 导出库和表的创建语句 将编码修改为utf8
  2. 导出所有数据
  3. 删除所有库和数据
  4. 利用新的建表和建库的语句创建新的库和表
  5. 导入数据