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字符集问题的主要内容,如果未能解决你的问题,请参考以下文章

部分代码片段

linux中怎么查看mysql数据库版本

使用 json rereiver php mysql 在片段中填充列表视图

如何将字符串数据从活动发送到片段?

将 JSON 字符串从片段传递到适配器的问题

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段