Mysql字符集问题

方法1:登录mysql,先做set names latin1,然后在执行更新语句或执行语句文件mysql> set names latin1;方法2:在sql文件中指定set names latin1;然后登录mysql,通过如下命令执行mysql> source test.sql;方法3:在sql文件中指定set names latin1;然后通过mysql命令导入数据mysql -uroot -p123456 test < test.sqlmysql -uroot -p123456 test -e "set names latin1;select * from test.test;"方法4:通过指定mysql命令的字符集参数实现--default-character-set=latin1cat test.sqlINSERT INTO test VALUES(9,张三);mysql -uroot -p123456 --default-character-set=latin1 test < test.sql方法5:在配置文件里设置客户端及服务端相关参数[client]default-character-set=latin1提示:无需重启服务,退出登录就生效更改my.cnf参数[mysqld]default-character-set=latin1 适合5.1及以前版本character-set-server=latin1 适合5.5确保服务端和客户端字符集相同 方法1:登录mysql,先做set names latin1,然后在执行更新语句或执行语句文件mysql> set names latin1;方法2:在sql文件中指定set names latin1;然后登录mysql,通过如下命令执行mysql> source test.sql;方法3:在sql文件中指定set names latin1;然后通过mysql命令导入数据mysql -uroot -p123456 test < test.sqlmysql -uroot -p123456 test -e "set names latin1;select * from test.test;"方法4:通过指定mysql命令的字符集参数实现--default-character-set=latin1cat test.sqlINSERT INTO test VALUES(9,张三);mysql -uroot -p123456 --default-character-set=latin1 test < test.sql方法5:在配置文件里设置客户端及服务端相关参数[client]default-character-set=latin1提示:无需重启服务,退出登录就生效更改my.cnf参数[mysqld]default-character-set=latin1 适合5.1及以前版本character-set-server=latin1 适合5.5确保服务端和客户端字符集相同 1、linux系统服务端cat /etc/sysconfig/i18nLANG="zh_CN.utf8"[root@localhost 3306]# echo $LANGzh_CN.UTF-8提示:linux客户端也要更改为UTF-82、Mysql数据库的客户端临时:mysql> set names utf8; 或者启动时指定 mysql -uroot -p123456 --default-character-set=utf8永久:更改my.cnf客户端的参数,可以实现set names utf8的效果,并且永久生效[client]default-character-set=utf8提示:配置文件修改无需重启3、Mysql服务端更改my.cnf[mysqld]default-character-set=utf8 适合5.1及以前版本character-set-server=utf8 适合5.54、Mysql数据库中建库建表指定字符集create database test default character set utf8 collate utf8_general_ci;5、开发程序字符集:简体UTF8 
#对于已有的数据库向修改字符集不能直接通过"alter database character set ..." 或 "alter table tablename character set ..." 修改,这两个命令都没有更新已有记录的字符集

而只是对于新创建的表或者记录生效,已经有记录的字符集的调整,必须要先将数据导出,经过修改字符集后重新导入后才可完成。


下面模拟将latin1字符集的数据库修改成GBK字符集的实际过程;

1、导出表结构
mysqldump -uroot -p --default-character-set=latin1 -d dbname >alltabl.sql ##--default-character-set=gbk 表示以gbk字符集进行连接 -d 只导表结构

2、编辑alltable.sql将latin1改成gbk

3、确保数据库不再更新,导出所有数据
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 dbname > alldata.sql

参数说明:
--quick:用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索所有行

--no-create-info : 不创建create table 语句

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

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

4、打开alldata.sql 将 set names latin1 修改成set names gbk

5、建库
create database dbname default charset gbk;

6、创建表,执行alldata.sql
mysql -uroot -p dbname < alltable.sql

7、导入数据
mysql -uroot -p dbname < alldata.sql



 

相关文章