问题描述:
Ubuntu18.04在使用mysql创建数据表的性别字段时,利用enum,出现这个错误。
#具体描述:
queena@queena-Lenovo:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
#查看所有的数据库.
mysql> show databases;
+-----------------------------+
| Database |
+-----------------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+-----------------------------+
4 rows in set (0.00 sec)
#新建school数据库.
mysql> create database school;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+------------------------------+
| Database |
+------------------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+------------------------------+
5 rows in set (0.00 sec)
#使用school数据库.
mysql> use school;
Database changed
#在school数据库中创建student表.
mysql> create table students(id int unsigned not null auto_increment primary key,name varchar(30),age tinyint unsigned default 0,high decimal(5,2),gender enum("男","女","保密"),cls_id int unsigned);
ERROR 1291 (HY000): Column 'gender' has duplicated value '?' in ENUM
#出现该报错.
解决方法:
将其对应的数据库,即database school,编码方式改为utf-8.
#将该数据库编码更改为utf-8,如下:
mysql> alter database school charset=utf8;
Query OK, 1 row affected (0.00 sec)
#可以看到,此时可以正常创建表students.
mysql> create table students(id int unsigned not null auto_increment primary key,name varchar(30),age tinyint unsigned default 0,high decimal(5,2),gender enum("男","女","保密"),cls_id int unsigned);
Query OK, 0 rows affected (0.25 sec)
#查看school数据库中的所有表.
mysql> show tables;
+-----------------------+
| Tables_in_school |
+-----------------------+
| students |
+-----------------------+
1 row in set (0.00 sec)
#描述students表,也可写为describe students.
mysql> desc students;
+----------+----------------------------+------+-----+-----------+----------------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------------+------+-----+-----------+----------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(30) | YES | | NULL | |
| age | tinyint(3) unsigned | YES | | 0 | |
| high | decimal(5,2) | YES | | NULL | |
| gender | enum('男','女','保密') | YES | | NULL | |
| cls_id | int(10) unsigned | YES | | NULL | |
+-----------+----------------------------+------+-----+----------+-----------------------+
6 rows in set (0.00 sec)
#插入数据.
mysql> insert into students values(0,"老王",18,175,"男",0);
Query OK, 1 row affected (0.04 sec)
#查看students表中的所有信息.
mysql> select * from students;
+----+--------+------+---------+----------+--------+
| id | name | age | high | gender | cls_id |
+----+--------+------+---------+----------+--------+
| 1 | 老王 | 18 | 175.00 | 男 | 0 |
+----+--------+------+---------+----------+--------+
1 row in set (0.00 sec)
mysql> insert into students values(null,"小李",12,168,"男",2);
Query OK, 1 row affected (0.04 sec)
mysql> select * from students;
+----+--------+------+---------+----------+--------+
| id | name | age | high | gender | cls_id |
+----+--------+------+---------+----------+--------+
| 1 | 老王 | 18 | 175.00 | 男 | 0 |
| 2 | 小李 | 12 | 168.00 | 男 | 2 |
+----+--------+------+---------+----------+--------+
2 rows in set (0.00 sec)
#根据指定信息查询.
mysql> select name from students;
+--------+
| name |
+--------+
| 老王 |
| 小李 |
+--------+
2 rows in set (0.00 sec)
mysql> quit
Bye
至此问题得以解决!