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

实验环境:

本地windows 8.1

远程连接工具 SecureCRT 7.3

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

mysql版本 mysql-5.5.32

1.1 MySQL数据库字符集介绍

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

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

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


常用字符集


一个汉字长度


说明


GBK


2字节


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


UTF-8


3字节


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


latin1


1字节


MySQL的默认字符集


utf8mb4


4字节


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

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

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

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

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

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

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

mysql> show character set;

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

mysql> show variables like ‘character_set%‘;

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

1.3 更改客户端的字符集

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;

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

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

mysql> show variables like ‘character_set%‘;

1.3.3 修改配置文件my.cnf

永久生效,上面

[client]

default-character-set=gbk

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

1.4 更改服务端字符集

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

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

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

1.4.3 命令行修改库的字符集

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

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

mysql> show create database oldboy\G

1.4.4 命令行修改表的字符集

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

mysql> alter table oldboy.test character set latin1;

mysql> show create table oldboy.test\G

1.5 防止乱码,统一其它地方

1.5.1 建表建库的时候注意统一字符集

建库

create database oldboy_utf8 default character set utf8 collate utf8_general_ci

建表

create table `student` (

`id`  int(4)  not null  auto_increment,

`name`  char(20)  not null,

primary key (`id`),

)  ENGINE=InnoDB  AUTO_INCREMENT=10  DEFAULT  CHARSET=utf8

1.5.2 程序

程序代码的编码要和库表统一,UTF-8无签名

1.5.3 linux服务端

cat /etc/sysconfig/i18n

$LANG的字符集要和数据库统一

1.5.4 连接工具CRT的字符集

更改SecureCRT工具的默认字符集为utf-8

1.5.5 在数据库中执行sql语句的方法

1)        操作习惯

尽量不在MySQL命令行直接插入数据(SSH客户端影响),将SQL语句放到文件里

2)        sql文件的格式

统一使用“uft8没有签名”

3)        导入文件方式

可在MySQL命令行中用source执行sql文件

命令方式导入数据mysql –uroot –poldboy123 oldboy <test.sql

4)        导入sql语句时设置客户端字符集

sql文件里加入set names utf8;

或者mysql –uroot –poldboy123 oldboy --default-character-set=uft8 <test.sql

1.6 更改已有数据的数据库字符集

思想:导出原库的表结构和数据,删除原库创建新库,将表结构和数据导入新库

1.6.1 导出表结构

mysqldump –uroot –poldboy123 --default-character-set=latin1 –d dbname >alltable.sql

--default-character-set=uft8表示以utf8字符集进行连接,-d只导表结构

1.6.2 编辑表结构语句

表结构alltable.sql将所有latin1字符串改成utf8(可以用sed做个替换)

1.6.3 导出数据

确保数据库不再更新,导出所有数据(不带表结构)

mysqldump –uroot –poldboy123 --quick --no-create-info --extended-insert --default-character-set =latin1 dbname >alldata.sql

参数说明:

--quick  用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索所有行,并输出前CACHE到内存中

--no-create-info  不创建CREATE TABLE语句

--extended-insert  使用包括几个VALUES列表的多行INSERT语法,这样文件更小,IO也小,导入数据时会非常快

--default-character-set =latin1  按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码

1.6.4 修改my.cnf配置

调整客户端及服务端字符集,重启生效

1.6.5 通过utf8建库

删除原库,然后create database dbname default charset utf8;

1.6.6 导入表结构

导入的是更改过的字符集的表结构

mysql –uroot –poldboy123 dbname <alltable.sql

1.6.7 导入数据

mysql –uroot –poldboy123 dbname <alldata.sql

PS:选择目录字符集时,要注意最好大于等于源字符集(字库更大),否则可能会丢失不被支持的数据

时间: 2024-10-27 01:33:32

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

远程连接linux下的mysql Err1045 Err2003解决办法

本人linux系统 Centos7 1.Err2003 我个人的情况是因为linux中防火墙开启并阻止了3306这个mysql端口的远程连接 解决办法: CentOS 7.0默认使用的是firewall作为防火墙,现在要将其关闭 systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启动firewall-cmd --state #查看默认防火墙状态(关闭后显示not

Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码

由于MySQL编码原因会导致数据库出现乱码. 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码. 具体操作: 1.进入MySQL控制台 >mysql -uroot -p #输入密码进入 >status; #查看当前MySQL运行状态,如下图所示: 2.修改mysql配置文件 [[email protected] ~]# vi /etc/my.cnf #在[client]段增加下面代码 default-character-set=utf

Linux 命令之 Navicat 连接 Linux 下的Mysql数据库

2016年12月7日18:44:06 -====------------------------ GRANT ALL PRIVILEGES ON *.* TO 'itoffice'@'%' IDENTIFIED BY 'itoffice' WITH GRANT OPTION;(第一个itoffice表示用户名,%表示所有的电脑都可以连接,也可以设置某个ip地址运行连接,第二个itoffice表示密码).这段指令容许所有用root用户输入密码登陆该mysql server,如果将'%' 换乘'19

Linux下开启mysql数据库的远程访问权限

摘要:今天在Linux服务器上安装了msyql数据库,在本地访问的时候可以访问,但是我想通过远程的方式访问的时候就不能访问了,查询资料后发现,Linux下MySQL默认安装完成后只有本地访问的权限,没有远程访问的权限,需要你给指定用户设置访问权限才能远程访问该数据库,下面把我的做法记录一下: 一:登录安装后的mysql数据库,如下图: 二:输入给root用户设置权限的命令行并回车,如下图: 这里的root代表root用户,最后的root代表root用户的密码,我这里用户名,密码都是root,中间

虚拟机VMware网络类型&amp;&amp;SSH远程连接Linux

前言: Linux专题是16年11月开始写,说来惭愧,已经5个月没学Linux,至今感觉连入门还没达到.暑假实习有投运维开发岗位,无奈对Linux不熟悉,校招简历也被刷了.so, 我打算先花1个月内的时间入下门.前几天还专门去当当网买了一本<跟老男孩学Linux运维-Web集群实战>.lenrning begin!! 一.虚拟机网络类型 为虚拟机选择网络类型是极其关键的.VMware虚拟机常见的网络类型有Bridged(桥接).NAT.Host-only(仅主机)3种.在创建Linux虚拟机时

linux下更改MySQL数据库存储路径

原文:http://www.cnit618.com/html/fwdkf/data/2111.htm linux下,MySQL默认的数据文档存储目录为/var/lib/mysql.假如要把MySQL目录移到/home/data下需要进行下面几步: 1.home目录下建立data目录 cd /home mkdir data 2.把MySQL服务进程停掉: mysqladmin -u root -p shutdown 3.把/var/lib/mysql整个目录移到/home/data mv /var

Linux下更改oracle客户端字符集和服务端字符集

from:http://blog.csdn.net/chid/article/details/6166506 Linux 下更改 oracle 客户端字符集和服务端字符集 1.Linux 下更改 oracle 客户端字符集,即设置环境变量" NLS_LANG" 的值 查看客户端字符集,在终端下执行: echo $NLS_LANG 修改客户端字符集: sudo gedit /etc/environment 在environment 文件中增加以下内容: NLS_LANG="SI

linux下对应mysql数据库的常用操作

ssh管理工具连接mysql数据库. 一.连接mysql数据库: 通过shh管理工具,登录linux的用户名,密码,进入ssh的命令行界面后,执行如下命令: mysql -u 数据库用户名 -p 然后回车 输入对应数据库的密码,连接进入mysql数据库. 二.备份mysql数据库 mysqldump -u 数据库用户名-p 备份的数据库名 > tm_050519.sql 默认备份到当前用户所在的目录.或者通过find -name tm_050519.sql全局查找. 三.Mysql中常用操作.

解决不能远程连接Linux服务器上MySQL的问题

今天在实验室的服务器上安装MySQL,装好后却发现远程的电脑无法连接到MySql服务器.服务器操作系统是Ubuntu 14.04.于是在网上查了些资料,折腾了半天后终于搞定了,下面是具体的步骤. 1)安装好MySQL后,修改如下文件 sudo vim /etc/mysql/my.cnf[如果说你不太会用Vi编辑器,你可以用SSH登陆后,将文件移除手动更改后,在上传到服务器覆盖该文件即可] 找到bind-address = 127.0.0.1,将绑定地址改成你服务器的地址[就是你的服务器机器的ip