我有一个带有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)字段慢。
发布于 2015-09-22 17:39:26
在CHAR字段中,使用空格将字段填充到其长度,然后删除空格:
来自https://dev.mysql.com/doc/refman/5.0/en/char.html:
CHAR列的长度固定在创建表时声明的长度。长度可以是0到255之间的任意值。当存储CHAR值时,它们将以指定长度的空格填充.当检索CHAR值时,删除尾随空格。。
如果您只想保留一个空格,则不应该使用CHAR类型。
如果在MySQL > 5.0.2中使用VARCHAR(1),则不应遇到此问题:
从MySQL 5.0.3开始,在存储和检索值时,将保留尾随空格,这与标准的SQL一致。在VARCHAR 5.0.3之前,当尾随空格存储到VARCHAR列中时,它们将从值中移除;这意味着从检索到的值中也没有这些空格。
https://stackoverflow.com/questions/32723272
复制相似问题