ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latinl
source test.sql
root# mysql -uroot -p'' oldboy < test.sql
default -charact-set=latinl
不乱码的思想:Linux,客户端,服务器,库,表,程序!
1、linux系统
root# cat /etc/sysconfig/i18n
#LANG="zh_CN.GB2312"
2、MySQL客户端
临时:
set 列名 latinl;
法1
#mysql -uroot -p
set names utf8
法2
#mysql -uroot -p --default-character-set=utf8
永久:
更改my.cnf客户端模块参数,实现set names utf8的效果,并且永久生效。
[client]
default-character-set=latinl
提示,无需重启服务,退出重新登陆,相当于 set names latinl
/etc/init.d/mysqld start
3、MySQL服务端
[mysqld]
default -character-set=utf8 5.1版本以及之前版本
character -set -server=usf8 5.5版本
4、MySQL库表
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_INCERMENT=10 DAFAULT CHARSET=utf8
5、
程序
简体 UTF8
总结:
mysqldump.mysqlbinlog.mysql.mysqladmin
6、查看表结构
desc 表名;
show columns from 表名;
describe 表名;
show create table 表名;
use information_schema
select * from columns where table_name='表名';
查看表结构:
mysql> status;
mysql> select version();
mysql --help | grep Distrib
$ rpm -qa|grep mysql
查看表状态:
show create table CourseG
查看字符集:
mysql -uroot -p'abc123,.' -e "SHOW CHARACTER SET;"
mysql -uroot -p'abc123,.' -e "SHOW CHARACTER SET;"|egrep "gbk|utf8|latin1"awk'{print $0}'
{
永久修改字符集:
另一种情况,可以永久生效字符集,方法如下:
对于中文乱码问题,需要设置mysql字符集:
用find命令查找cnf文件。记得不要去找my.cnf因为它不一定存在,而应该找*.cnf。
# find / -name '*.cnf'
/usr/share/doc/MySQL-server-5.5.27/my-huge.cnf
/usr/share/doc/MySQL-server-5.5.27/my-large.cnf
/usr/share/doc/MySQL-server-5.5.27/my-medium.cnf
/usr/share/doc/MySQL-server-5.5.27/my-small.cnf
/usr/share/doc/MySQL-server-5.5.27/my-innodb-heavy-4G.cnf
/usr/share/doc/kpathsea-2007/kpathsea_defaults/texmf-kpathsea-defaults.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-small.cnf
/usr/share/mysql/my-innodb-heavy-4G.cnf
/etc/pki/tls/openssl.cnf
找到之后,复制一个出来
# cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
打开my.cnf修改编码
# vi /etc/my.cnf
mysql 5.5以下:
在[mysqld]下添加
default-character-set=utf8
在[client]下添加
default-character-set=utf8
mysql 5.5 改为:
[client]
character-set-server = utf8
[mysqld]
character-set-server = utf8
}
登陆时修改字符集:
mysql -uroot -p'abc123,.' --default-character-set=latin1
检查:
sed -n '18,19p' /etc/my.cnf
[client]
#default-character-set=utf8
#password = your_password
为什么服务器要重启才能生效:
因为linux要把配置加载到内存才行
指定字符集建库:
create database names DEFALUT 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_INCERMENT=10 DAFAULT CHARSET=utf8
字符集要一致:
表
库
/etv/my.cnf
[mysqld]服务端
[client]客户端
Linux
/etc/sysconfig/i18n
开发程序
如何更改生产MySQL数据库库表字符集
对于已有的数据库想修改字符集不能通过"alter adtabase character set*"或"alter table tablename character set*"
这两个命令都不能更新已有记录的字符集,只能更新新创建的表或者记录
已经有记录的字符集的调整,必须先将数据导出,经过修改字符集后重新导入后才能完成修改。
1、导出表结构
mysqldump -uroot -p --default-character-set=latinl -d dbname>alltable.sql
--default-character-set=gbk 表示字符集进行连接 -d只导表结构
2、编辑alltable.sql将latin1改成GBK
3、确保数据库不再更新,导出所以数据
mysqldump -uroot -p --quick --no-create-info --extend-insert --default-character-set=latin1 dbname >alldata.sql
参数说明:
--quick:用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索所有行,并输出前CACHE到内存中
--no-create-info:不创建 CREATE TABLE语句 --extend-insert:使用包括几个VALUES列表的多行INSERT语法,这样文件更小,IO也小,导入数据时会非常快。 --default-character-set=latin1:#按照原有的字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。
4、打开alldata.sql将set names latin1 修改成set names gbk;
5、建库
create database daname default charset gbk;
6、创建表,执行allable.sql
mysql -uroot -p dbaneme <alltable.sql
7、导入数据:
mysql -uroot -p dbaneme <alldata.sql
注意:
选择目标字符集时,要注意最好大于等于源字符集(字库更大),否则 可能会丢失不被支持的数据。
总结:
1、导出表结构及建库建表语句,sed批量更改
2、导出所以数据
3、修改mysql服务端和客户端编码
4、删除原有的库表及数据
5、导入新的建库及建表语句
6、导入mysql的所有数据
inser into Course (Cno,Cname,Tno)values(1,计算机,1);