以下所有的操作均为mysql5.5环境下
一、创建一个数据库,默认字符集是latin1
mysql> create database dbatest;
mysql> show create database dbatest\G
mysql> show create database dbatest\G
*************************** 1. row ***************************
Database: dbatest
Create Database: CREATE DATABASE `dbatest` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)
创建一个表
mysql> show create table student\G
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`age` tinyint(2) NOT NULL DEFAULT '0',
`dept` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
二、创建数据库
mysql> insert into student values (1,'amsilence');
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into student values (1,'amsilence',20,'one');
Query OK, 1 row affected (0.00 sec)
mysql> select * from student;
+----+-----------+-----+------+
| id | name | age | dept |
+----+-----------+-----+------+
| 1 | amsilence | 20 | one |
+----+-----------+-----+------+
1 row in set (0.00 sec)
插入中文查看,发现中文乱码
mysql> insert into student values (2,'化繁为简',20,'two');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from student;
+----+-----------+-----+------+
| id | name | age | dept |
+----+-----------+-----+------+
| 1 | amsilence | 20 | one |
| 2 | ???? | 20 | two |
+----+-----------+-----+------+
2 rows in set (0.00 sec)
三、中文乱码解决办法
方法1:mysql> set names latin1;
结果:
mysql> insert into student values (3,'化繁为简',20,'three');
Query OK, 1 row affected (0.01 sec)
mysql> select * from student;
+----+--------------+-----+-------+
| id | name | age | dept |
+----+--------------+-----+-------+
| 1 | amsilence | 20 | one |
| 2 | ???? | 20 | two |
| 3 | 化繁为简 | 20 | three |
+----+--------------+-----+-------+
3 rows in set (0.00 sec)
方法2:创建一个.sql文件,在mysql中导入
mysql> system cat ~/test.sql
set names latin1;
insert into student values (4,'简单',20,'666');
source导入数据
mysql> source ~/test.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.01 sec)
结果:
mysql> select * from student;
+----+--------------+-----+-------+
| id | name | age | dept |
+----+--------------+-----+-------+
| 1 | amsilence | 20 | one |
| 2 | ???? | 20 | two |
| 3 | 化繁为简 | 20 | three |
| 4 | 简单 | 20 | 666 |
+----+--------------+-----+-------+
4 rows in set (0.00 sec)
方法3:使用mysql导入数据库时加字符集参数选项
参数:
[root@mysql-dba ~]# mysql -uroot -p123456 --default-character-set=latin1 dbatest < test.sql
例子:
[root@mysql-dba ~]# cat test.sql
insert into student values (5,'简单2',20,'666');
insert into student values (6,'简单3',20,'666');
insert into student values (7,'简单4',20,'666');
insert into student values (8,'简单5',20,'666');
查看数据库:
注意:查看的时候需要将数据库里面的字符集设置latin1,不然显示会乱码
mysql> set names latin1;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from student;
+----+--------------+-----+-------+
| id | name | age | dept |
+----+--------------+-----+-------+
| 1 | amsilence | 20 | one |
| 2 | ???? | 20 | two |
| 3 | 化繁为简 | 20 | three |
| 4 | 简单 | 20 | 666 |
| 5 | 简单2 | 20 | 666 |
| 6 | 简单3 | 20 | 666 |
| 7 | 简单4 | 20 | 666 |
| 8 | 简单5 | 20 | 666 |
+----+--------------+-----+-------+
8 rows in set (0.00 sec)
方法4:在配置文件里设置修改客户端和服务端相关参数(永久生效)
修改my.cnf配置文件
在[mysqld]这个区块内添加参数
character-set-server=latin1
在[client]区块里面添加
default-character-set=latin1
小结:不乱码就是统一字符集,服务端、客户端、库、表、程序都要统一
如果里面已经存在数据,那么需要将数据导出重新建立数据库在导入数据。
相关文章
- Dev Express 中GridControl导出为PDF时出现中文乱码现象的解决办法
- windows下Emacs中文乱码解决办法[2013-03-07更新]
- python向mysql数据库中插入数据时不报错但是未成功插入的解决办法
- zipoutputstream设置名称_Java中ZIP压缩与解压--中文文件名乱码解决办法
- IntelliJ IDEA 中的控制台输出日志中文乱码之解决办法
- MyEclipse导入项目,中文乱码的解决办法
- powershell打开中文乱码问题的解决办法
- 软件读写中文字符的文件出现乱码的解决办法
- elasticsearch控制台中文乱码和jvm内存大小调整。 解决办法:
- 解决Docker容器中Mysql中文乱码问题