菜单

ssh远程连接linux下的MySQL数据库字符集和防止乱码

2019年11月23日 - 数据网络

最近得到了一个数十M的MySQL脚本文件,准备还原为数据库。

ssh远程连接linux下的MySQL数据库字符集和防止乱码,sshmysql

以前就使用MySQL-Front短暂使用过MySQL,先用它试试,结果挂掉。

实验环境:

本地windows 8.1

远程连接工具 SecureCRT 7.3

Linux发行版本 CentOS 6.7 x86_64位Linux系统,内核的版本为2.6.32-573

mysql版本 mysql-5.5.32

这样吧,先用MySQL-Front创建了空数据库,然后使用mysql命令行导入吧。

1.1 MySQL数据库字符集介绍

字符集就是一套文字符号及编码、比较规则的集合

MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。其中,字符集是用来定义MySQL数据字符串的存储方式,而校对规则是定义比较字符串的方式。

1)使用MySQL-Front创建了空数据库

1.1.1 在互联网环境中,使用MySQL时常用的字符集有

常用字符集

一个汉字长度

说明

GBK

2字节

不是国际标准,对中文环境支持的很好

UTF-8

3字节

中英文混合的环境,建议使用此字符集,用的比较多

latin1

1字节

MySQL的默认字符集

utf8mb4

4字节

UTF-8 Unicode,用于移动互联网

因为看脚本中对象都有DEFAULT CHARSET=gbk COMMENT=…
指令,所以字符集选择gbk

1.1.2 MySQL如何选择合适的字符集

1)       
如果处理各种各样的文字,发布到不同语言国家地区,应选择Unicode字符集,对mysql来说就是UTF-8(每个汉字3字节),更适合于多英文少中文

2)       
如果只需要支持中文,并且数据量很大,性能要求也很高,可选GBK(定长,每个汉字占双字节,英文也占双字节),更适合于大量运算、比较排序,定长字符集,性能较高

3)        处理移动互联网业务,可能需要使用utf8mb4字符集

老师建议:没有特别需求,请选择UTF-8

2)启动MySQL命令行,输入密码

1.1.3 查看当前MySQL系统支持的字符集

mysql> show character set;

图片 1

3)使用新建的数据库b

1.2 查看系统当前使用的字符集

mysql> show variables like ‘character_set%’;

 图片 2

想要不乱码,就要让上述字符集统一

输入命令: use b;

1.3 更改客户端的字符集

4)更改文件读取字符集为utf8,这一步很关键

1.3.1 进入数据库后更改客户端字符集

set names gbk;

将3个客户端的字符集(1、2、5)改为gbk

相当于输入下面3条命令:

set character_set_client = gbk;

set character_set_results = gbk;

set character_set_connection = gbk;

开始时,看到DEFAULT CHARSET=gbk COMMENT=…
,以为要设为gbk,就使用了以下指令:

1.3.2 登录数据库时更改客户端字符集,效果同上

[[email protected]
~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock
–default-character=gbk;

mysql> show variables like ‘character_set%’;

 图片 3

set names gbk;

1.3.3 修改配置文件my.cnf

永久生效,上面

[client]

default-character-set=gbk

注意:多实例的情况下,此步骤修改字符集,要修改/etc/my.cnf

但是导入时,全是错误,无法识别中文。

1.4 更改服务端字符集

后来认识到应该设置为SQL文件本身的字符集,那SQL文件本身的字符集是什么呢?

1.4.1 修改配置文件my.cnf

[mysqld]

default-character-set=utf8  ##适合5.1及以前版本

character-set-server=uft8  ##适合5.5

重启服务后永久生效

这个修改影响的第3和第6个字符集,相当于修改

character_set_database

character_set_server

我的方法是用VS.net IDE 打开文件,然后另存为,选择“编码保存”

1.4.2 在编译的时候指定服务端字符集

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

由此看到字符集是utf-8;

1.4.3 命令行修改库的字符集

不建议在有数据的库上修改,下面的命令对之前已经存在的数据无效,影响之后更新的数据

mysql> alter database oldboy character set latin1 collate =
latin1_swedish_ci;

mysql> show create database oldboy\G

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图