mysql 设置字符集(插入中文字符)
头一次用mysql数据库,结果出了这样的错误,建了一个表,其中有个字段“name”
类型为varchar(15),结果插入中文字,出现这样的错误:
Data too long for column
“name” at row 1
在网上找了很多解决办法,都没成功,
第一种失败的办法
设置数据编码为utf8
mysql> use test;//test为数据库的名字
Database changed
mysql> set names utf8; //设置数据库字符集为utf8
Query OK, 0 rows affected (0.00 sec)
Database changed
mysql> set names utf8; //设置数据库字符集为utf8
Query OK, 0 rows affected (0.00 sec)
第二种失败的办法,C:\Program Files\MySQL\MySQL Server 5.0下的my.ini
在[client]下添加
default-character-set=utf8
default-character-set=utf8
在[mysqld]下添加
default-character-set=utf8
default-character-set=utf8
第三种失败的办法
set character_set_database=utf8;
第四种失败的办法,我新建了一个数据库,编码都弄成utf8,然后他可以正常的插入中文,然后我把C:\Program Files\MySQL\MySQL Server 5.0\data\下的对应这个可插入中文数据库的db.opt文件中的编码拷给我不能插入中文的数据库的db.opt文件,此时他们的编码应该是一样的,其它的理论上讲都是一样的,我在重启后,在插入还是不行,这真的是很让人理解不了
而且编码全改成了utf8,还是不行,这真的让我很郁闷
mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set
mysql> show variables like 'character_set_%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set
mysql> show variables like 'character_set_%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set
成功的方法
最后精确到表了修改数据库中表的字符集编码,搞定,
isa是我的数据库的名字,users是我的表名
mysql> use isa;
Database changed
mysql> ALTER TABLE users CONVERT TO CHARACTER SET utf8;
Database changed
Records: 3 Duplicates: 0 Warnings: 0
Database changed
mysql> ALTER TABLE users CONVERT TO CHARACTER SET utf8;
Database changed
Records: 3 Duplicates: 0 Warnings: 0
同时也学到了一些相关的命令行操作
相关命令操作
1。查看字符集编码的命令:
mysql> show variables like '%char%';
然后会有:
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set
如果你想改变某个值,如character_set_database的编码
mysql> set character_set_database=utf8;
alter database mydb charset=utf8;
show variables like 'collation_%';
show variables like 'character_set_%';
SELECT COLLATION(USER()), COLLATION('@');
+-------------------+-----------------+
| COLLATION(USER()) | COLLATION('@') |
+-------------------+-----------------+
| utf8_general_ci | utf8_general_ci |
+-------------------+-----------------+
1 row in set
| COLLATION(USER()) | COLLATION('@') |
+-------------------+-----------------+
| utf8_general_ci | utf8_general_ci |
+-------------------+-----------------+
1 row in set
linux 系统上:
?mysql -u root -p wwwfreebiocnsql --default-character-set=utf8
现在的步骤就是将MySQL的数据导出了,在mysql的命令提示符下(linux系统为mysql的命令目录下),输入下面导出的命令:
mysqldump -uroot -p --default-character-set=gbk --set-charset=latin1 --compatible=mysql40 --skip-opt discuz>discuz. sql
这样就轻松的将数据从MySQL数据库中导出了,此时导出的文件在与mysql命令同级的目录下,即bin目录下,而且已经将MySQL字符集导出为Latin1的了!现在要做的就是将数据导入MySQL4.0中去!
同样在4.0版本的mysql命令提示符下(linux系统为mysql的命令目录下),输入下面导入命令:
mysql -uroot -p --default-character-set=latin1 -f discuz
这样就将字符集从GBK转为Latin1同时将MySQL从4.1以上版本的转为MySQL4.0的了!
现在讲解一下如何从Latin1字符集转换为GBK的!
由于只有MySQL4.1以上的版本才有字符集的概念,所以如果你要将MySQL4.0的字符集从Latin1转换为GBK字符集的话,必须导入到MySQL4.1以上的版本中,然后再导出!这里面就多了一个导出为Latin1的步骤!
同样在MySQL4.0的命令提示符下,输入下面导出的命令:
mysqldump -uroot -p --default-character-set=latin1 --set-charset=latin1 --skip-opt discuz>discuz. sql
然后导入到MySQL4.1中,输入下面导入的命令:
mysql -uroot -p --default-character-set=latin1 -f discuz
然后在MySQL4.1下转换字符集,分别输入下面导出和导入的命令:
mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt discuz>discuz. sql
mysql -uroot -p --default-character-set=gbk -f newdiscuz
如果不出问题的话,那么转换就完毕了!其实整个过程还是比较简单的,只是过程看起来比较麻烦些,但是过程却是很简单明了的!
下面举出一个在导入过程中极易容易出现的问题!
在导入的时候容易出现unknown command '/'这样的错误,其实这是由于MySQL在导出的时候,它有时候给一些繁体字后面自动加上了个反斜杠造成的!解决此问题的办法就是打开备份的 sql(这里为discuz. sql),提示错误的时候会提示具体哪行出现了错误,找到那行,把反斜杠去掉就行了!其实你可以用Ultraedit这些文本处理的工具,批量的去处理这些反斜杠!凭个人经验,有很多用户名取的比较怪,这样就容易出现反斜杠,这样只要纠正那些用户名就行了!
mysqldump -uroot -p --default-character-set=gbk --set-charset=latin1 --compatible=mysql40 --skip-opt discuz>discuz. sql
这样就轻松的将数据从MySQL数据库中导出了,此时导出的文件在与mysql命令同级的目录下,即bin目录下,而且已经将MySQL字符集导出为Latin1的了!现在要做的就是将数据导入MySQL4.0中去!
同样在4.0版本的mysql命令提示符下(linux系统为mysql的命令目录下),输入下面导入命令:
mysql -uroot -p --default-character-set=latin1 -f discuz
这样就将字符集从GBK转为Latin1同时将MySQL从4.1以上版本的转为MySQL4.0的了!
现在讲解一下如何从Latin1字符集转换为GBK的!
由于只有MySQL4.1以上的版本才有字符集的概念,所以如果你要将MySQL4.0的字符集从Latin1转换为GBK字符集的话,必须导入到MySQL4.1以上的版本中,然后再导出!这里面就多了一个导出为Latin1的步骤!
同样在MySQL4.0的命令提示符下,输入下面导出的命令:
mysqldump -uroot -p --default-character-set=latin1 --set-charset=latin1 --skip-opt discuz>discuz. sql
然后导入到MySQL4.1中,输入下面导入的命令:
mysql -uroot -p --default-character-set=latin1 -f discuz
然后在MySQL4.1下转换字符集,分别输入下面导出和导入的命令:
mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt discuz>discuz. sql
mysql -uroot -p --default-character-set=gbk -f newdiscuz
如果不出问题的话,那么转换就完毕了!其实整个过程还是比较简单的,只是过程看起来比较麻烦些,但是过程却是很简单明了的!
下面举出一个在导入过程中极易容易出现的问题!
在导入的时候容易出现unknown command '/'这样的错误,其实这是由于MySQL在导出的时候,它有时候给一些繁体字后面自动加上了个反斜杠造成的!解决此问题的办法就是打开备份的 sql(这里为discuz. sql),提示错误的时候会提示具体哪行出现了错误,找到那行,把反斜杠去掉就行了!其实你可以用Ultraedit这些文本处理的工具,批量的去处理这些反斜杠!凭个人经验,有很多用户名取的比较怪,这样就容易出现反斜杠,这样只要纠正那些用户名就行了!