mysql 字符集更改与导入数据
mysqldb经常有中文乱码的问题,解决起来很恼火。其实所有开发和数据库统一为一种编码就可以了: utf8。
1) 永久修改. 在/etc/mysql/my.cnf中添加下面二行:
[client]
...
default-character-set=utf8
...
[mysqld]
...
character-set-server=utf8
...
$ sudo /etc/init.d/mysql restart
$ mysql -u root -p abc123 -h 127.0.0.1 --local-infile=1
# 显示字符集
# mysql> show variables like 'character_set_%';
# 显示字符排列顺序
# mysql> show variables like 'collation_%';
应该如下显示:
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 | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
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 (0.01 sec)
2) 临时修改,登录mysql后执行下面的命令:
delimiter |
SET GLOBAL character_set_client = utf8 |
SET GLOBAL character_set_connection = utf8 |
SET GLOBAL character_set_database = utf8 |
SET GLOBAL character_set_results = utf8 |
SET GLOBAL character_set_server = utf8 |
SET GLOBAL collation_connection = utf8_general_ci |
SET GLOBAL collation_database = utf8_general_ci |
SET GLOBAL collation_server = utf8_general_ci |
delimiter ;
这之后,所有的数据文件,程序都统一为utf8编码。
2 下面导入数据,首先创建表prov和city:
登录mysql (注意--local-infile=1启用数据导入功能):
mysql -u root -p abc123 -h 127.0.0.1 --local-infile=1
mysql> source metadb.cresql
1) metadb.cresql内容如下:
#-----------------------------------------------------------------------
# metadb.cresql
# copyright by cheungmine
# -- create sql for database metadb
# $ mysql -u root -p abc123 -h 127.0.0.1 --local-infile=1
#-----------------------------------------------------------------------
delimiter |
############################### BEGIN ##################################
SET GLOBAL character_set_client = utf8 |
SET GLOBAL character_set_connection = utf8 |
SET GLOBAL character_set_database = utf8 |
SET GLOBAL character_set_results = utf8 |
SET GLOBAL character_set_server = utf8 |
SET GLOBAL collation_connection = utf8_general_ci |
SET GLOBAL collation_database = utf8_general_ci |
SET GLOBAL collation_server = utf8_general_ci |
show variables like 'character_set_%' |
show variables like 'collation_%' |
create database if not exists metadb character set utf8 |
alter database metadb default character set utf8 collate utf8_general_ci |
drop table if exists metadb.`city` |
drop table if exists metadb.`prov` |
create table metadb.`prov` (
`prov_code` int(2) not null primary key comment '省代码',
`prov_name` varchar(30) not null comment '省名称',
unique key `uk_prov_name` (`prov_name`)
) engine=innodb default charset=utf8 comment='省、自治区表' |
create table metadb.`city` (
`city_code` int(4) not null primary key comment '市代码',
`city_name` v