T. *_*nes4mysqlwhitespacechar
我有一个带有 CHAR(1) 字段的 MySQL 表。我在其中存储单个字符。有时我需要在这个字段中存储一个空格,但是 MySQL 不允许我这样做。我正在使用 MySQL v.5.6.22。
这会运行,但存储了一个空字段:
INSERTINTOcompanies(name_char_0)values(' ');
这将返回一个空值:
SELECTHEX(name_char_0)FROMcompanies;
我没有遇到 VARCHAR(1) 字段的这个问题,但是我有一系列这些 CHAR 字段,因为查找和速度是一个问题。我相信 VARCHAR(1) 字段的搜索速度总是比 CHAR(1) 字段慢。
Dig*_*ris5
在 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,在存储和检索值时保留尾随空格。在 MySQL 5.0.3 之前,将值存储到 VARCHAR 列时,会从值中删除尾随空格;这意味着检索到的值中也不存在空格。
与其对 mysql 字段如何运作以适应您的用例而胡思乱想,我只想改变您的用例:进行字符替换并使用除空格之外的其他内容。或者使用 varchar。我不相信 varchar(1) 会比 char 慢得多,但是 YMMV。(2认同)