Mysql. 空格存储问题

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认同)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值