我有一个带有CHAR(1)字段的MySQL表。我在其中存储单个字符。有时候我需要在这个领域存储一个空间,但是MySQL并没有让我这么做。我正在使用MySQL v.5.6.22。
这会运行,但会存储一个空字段:
INSERT INTO
companies(name_char_0)
values(' ');
返回一个空值:
SELECT HEX(name_char_0)
FROM companies;
我没有在VARCHAR(1)字段中遇到此问题,但我有一系列这些CHAR字段作为查找,速度是个问题。我相信VARCHAR(1)字段的搜索速度总是比CHAR(1)字段慢。
答案 0 :(得分:4)
在CHAR字段中,空格用于将字段填充到其长度,然后剥离空格:
来自https://dev.mysql.com/doc/refman/5.0/en/char.html:
CHAR列的长度固定为创建表时声明的长度。长度可以是0到255之间的任何值。当存储CHAR值时,它们用空格填充到指定的长度。 检索CHAR值时,将删除尾随空格。
如果您只想要一个空格,则不应使用CHAR类型。
如果你在MySQL中使用VARCHAR(1)> 5.0.2你不应该遇到这个问题:
从MySQL 5.0.3开始,在存储和检索值时,将保留尾随空格,符合标准SQL。在MySQL 5.0.3之前,当存储到VARCHAR列中时,会从值中删除尾随空格;这意味着检索到的值也不存在空格。