MySQL字段之集合(set)枚举(enum)

MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23)

集合 SET

mysql> create table jihe(f1 set('f','m'));
Query OK, 0 rows affected (0.11 sec)

mysql> desc jihe;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| f1    | set('f','m') | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

可以插入值 "f" "m"

mysql> insert into jihe values("f");
Query OK, 1 row affected (0.56 sec)

mysql> insert into jihe values("m");
Query OK, 1 row affected (0.19 sec)

可以按照序号输入 注意序号为 1 2 4 8 16 32 ....

mysql> insert into jihe values("1");
Query OK, 1 row affected (0.11 sec)

mysql> insert into jihe values("2");
Query OK, 1 row affected (0.11 sec)

所以如果是3那插入的值为 第一个和第二个

mysql> insert into jihe values("3");
Query OK, 1 row affected (0.17 sec)

+-------+
| f1    |
+-------+
| f     |
| m     |
| f     |
| m     |
| f,m   |

+-------+

其他字母不能插入

mysql> insert into jihe values("q");
ERROR 1265 (01000): Data truncated for column 'f1' at row 1

插入空
mysql> insert into jihe values("0");
Query OK, 1 row affected (0.11 sec)

超出序号之和不能插入

mysql> insert into jihe values("4");
ERROR 1265 (01000): Data truncated for column 'f1' at row 1

 

枚举

mysql> create table meiju(f1 enum('1','2','3','4','5','6'));
Query OK, 0 rows affected (0.92 sec)

mysql> desc meiju;
+-------+-------------------------------+------+-----+---------+-------+
| Field | Type                          | Null | Key | Default | Extra |
+-------+-------------------------------+------+-----+---------+-------+
| f1    | enum('1','2','3','4','5','6') | YES  |     | NULL    |       |
+-------+-------------------------------+------+-----+---------+-------+

 

mysql> insert into meiju values(2);

mysql> insert into meiju values("2");

mysql> insert into meiju values("6");

序号为 1  2  3  4  5

内容没有序号也没有就不能插入

mysql> insert into meiju values(8);
ERROR 1265 (01000): Data truncated for column 'f1' at row 1
mysql> insert into meiju values("8");
ERROR 1265 (01000): Data truncated for column 'f1' at row 1

mysql> select * from meiju;
+------+
| f1   |
+------+
| 1    |
| 2    |
| 2    |
| 6    |
+------+

改表

mysql> alter table meiju modify f1 enum("a","b","c","d","e","f");
Query OK, 4 rows affected (0.39 sec)
Records: 4  Duplicates: 0  Warnings: 0

可以自动将记录当序号匹配成新的字段值(挺神奇)

mysql> select * from meiju;
+------+
| f1   |
+------+
| a    |
| b    |
| b    |
| f    |
+------+

一个记录只能有一个枚举值 不像set 可以累加

mysql> insert into meiju values(7);
ERROR 1265 (01000): Data truncated for column 'f1' at row 1

注意最好输入的是值得时候值要加引号 否则当作序号来处理

当带引号的数字不符合枚举要求时会试一试当作序号合适不合适

如 insert into meiju values("7");

7不在枚举值内 就插入第7个值 如果没有7个值则报错

集合 和 枚举的区别

1 集合可以有64个值 枚举有65535个

2 集合的序号是 1 2 4 8 16 枚举是 1 2 3 4 5 6

3 集合一个字段值可以有好几个值

+-------+
| f1    |
+-------+
| f,m   |
+-------+

而枚举只能有一个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的枚举类型可以通过以下步骤将其存储到MySQL中: 1. 在MySQL数据库中创建一个包含枚举常量的列,例如: ``` CREATE TABLE example ( id INT NOT NULL AUTO_INCREMENT, enum_col ENUM('VALUE1', 'VALUE2', 'VALUE3'), PRIMARY KEY (id) ); ``` 2. 在Java中定义一个枚举类型,并添加一个字段来保存枚举常量的值: ``` public enum ExampleEnum { VALUE1("VALUE1"), VALUE2("VALUE2"), VALUE3("VALUE3"); private final String value; ExampleEnum(String value) { this.value = value; } public String getValue() { return value; } } ``` 3. 在Java中使用JDBC将枚举类型转换为字符串类型,并将其保存到MySQL中: ``` // 获取数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/example_db", "username", "password"); // 准备SQL语句 String sql = "INSERT INTO example (enum_col) VALUES (?)"; PreparedStatement stmt = conn.prepareStatement(sql); // 将枚举类型转换为字符串类型 ExampleEnum exampleEnum = ExampleEnum.VALUE1; String enumValue = exampleEnum.getValue(); // 设置参数并执行SQL语句 stmt.setString(1, enumValue); stmt.executeUpdate(); ``` 4. 在Java中从MySQL中读取枚举类型,并将其转换回Java中的枚举类型: ``` // 准备SQL语句 String sql = "SELECT enum_col FROM example WHERE id = ?"; PreparedStatement stmt = conn.prepareStatement(sql); // 设置参数并执行SQL语句 stmt.setInt(1, 1); ResultSet rs = stmt.executeQuery(); // 读取结果集并将其转换回Java中的枚举类型 if (rs.next()) { String enumValue = rs.getString("enum_col"); ExampleEnum exampleEnum = ExampleEnum.valueOf(enumValue); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值