我正在创建一个 MySQL 表,其中一个列的类型是 ENUM
。
我有几个不同的 ENUM
值。其中一些是两个或多个单词,例如Hugo Boss。
其他 ENUM
值中有撇号,例如男性或其他角色,例如&.
我的问题分为两部分:
- 可以在
ENUM
值(两个单词或更多)中包含一个或多个空格吗? ENUM
值中是否允许使用撇号、与号和其他此类字符?如果是,我将如何放置它们?
最佳答案
似乎是这样:
MySQL [files]> create temporary table t(foo ENUM('123', '1&2', '3\'4'));
Query OK, 0 rows affected (0.17 sec)
MySQL [files]> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TEMPORARY TABLE `t` (
`foo` enum('123','1&2','3''4') COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
1 row in set (0.09 sec)
MySQL [files]> insert into t values (0), (1), (2), (3);
Query OK, 4 rows affected, 1 warning (0.12 sec)
Records: 4 Duplicates: 0 Warnings: 1
MySQL [files]> show warnings;
+---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'foo' at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.11 sec)
MySQL [files]> select * from t;
+------+
| foo |
+------+
| |
| 123 |
| 1&2 |
| 3'4 |
+------+
4 rows in set (0.09 sec)
MySQL [files]>
注意:警告意味着我使用了一个不允许的值 - 我试图插入 3,它没有被定义为 ENUM
的值。
因此它可以完美地工作——与 MySQL 中的任何其他字符串一样。您只需要注意正确对待它们 - 作为十六进制值,或使用 mysql_real_escape_string()
或准备好的语句。这提供了“关键”值的正确通信,例如 \\
、'
、"
等。
例如,如果我有一个包含“3'4”的字符串,并且我想将其定义为枚举的一部分,我可以通过放置 0x332734
或 '3\'4'
到适当的地方。 '3\'4'
是所用编程语言中mysql_real_escape_string("3'4")
的结果。
NUL 字符不允许作为 ENUM
组件,因为它们将出现在数据字符串中 - 不过,使用的字符串之前已终止。
关于mysql - MySQL 枚举值中的空格、撇号和符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502715/