Mysql字符集问题
Posted template
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.sql mysql -uroot -p123456 test -e "set names latin1;select * from test.test;" 方法4: 通过指定mysql命令的字符集参数实现--default-character-set=latin1 cat test.sql INSERT 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.sql mysql -uroot -p123456 test -e "set names latin1;select * from test.test;" 方法4: 通过指定mysql命令的字符集参数实现--default-character-set=latin1 cat test.sql INSERT 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/i18n LANG="zh_CN.utf8" [[email protected] 3306]# echo $LANG zh_CN.UTF-8 提示:linux客户端也要更改为UTF-8 2、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.5 4、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
以上是关于Mysql字符集问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 json rereiver php mysql 在片段中填充列表视图
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段