【问题标题】:How can I store a space character in a MySQL CHAR field?如何在 MySQL CHAR 字段中存储空格字符?
【发布时间】:2015-09-22 17:33:28
【问题描述】:

我有一个带有 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) 字段慢。

【问题讨论】:

  • 什么版本的mysql?
  • 刚刚注意到您使用的是 CHAR....

标签: mysql char whitespace


【解决方案1】:

在 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 列中时,它们会从值中删除尾随空格;这意味着检索到的值中也没有空格。

【讨论】:

  • VARCHAR(1) 是一个很好的解决方案......但是,我将这些用作查找字段,并且在索引 VARCHAR 上的搜索将比在索引 CHAR 上慢(我认为) .还有其他想法吗?也许一些配置更改将允许 CHAR 字段中的空格。
  • 与其对 mysql 字段如何运作以适应您的用例的工作方式进行模仿,我只想改变您的用例:进行字符替换并使用除空格之外的其他内容。或者使用varchar。我不相信 varchar(1) 会比 char 慢很多,但是 YMMV。
  • 顺便说一句,我看到 VARCHAR 将仅存储和检索字段在存储数据时收到的尾随空格(插入/更新)。 MySql 不会为您添加它们来满足列长度。
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多