2015-09-22 66 views
3

我有一個帶有CHAR(1)字段的MySQL表。我存儲單個字符。有時我需要在此字段中存儲空間,但MySQL不允許我。我正在使用MySQL v.5.6.22。如何在MySQL CHAR字段中存儲空格字符?

此運行,但空字段存儲:

INSERT INTO 
companies(name_char_0) 
values(' '); 

這將返回一個空值:

SELECT HEX(name_char_0) 
FROM companies; 

我不會遇到此問題,VARCHAR(1)場,但我有一系列這些CHAR字段作爲查找和速度是一個問題。我相信VARCHAR(1)字段的搜索總是比CHAR(1)字段慢。

+0

什麼版本的mysql? –

+0

只注意到你正在使用CHAR .... –

回答

3

在CHAR字段,空間用於墊的場至其長度,則該空間被剝離:

https://dev.mysql.com/doc/refman/5.0/en/char.html

CHAR列的長度被固定到長度你在創建表時聲明。長度可以是0到255之間的任何值。當存儲CHAR值時,它們用空格填充到指定的長度。 當檢索到CHAR值時,尾隨空格被刪除。

,如果你想保持唯一一個空格,則不應使用CHAR類型。

如果使用VARCHAR(1)在MySQL> 5.0.2你應該不會遇到這個問題:

在MySQL 5.0.3,當值存儲和檢索保留尾隨空格,以符合與標準的SQL。在MySQL 5.0.3之前,將尾部空格存儲到VARCHAR列時將其從值中刪除;這意味着空間也沒有被檢索到的值。

+0

VARCHAR(1)是一個很好的解決方案...但是,我將它們用作查找字段,並且搜索索引VARCHAR將比在索引CHAR(我認爲)。任何其他想法?也許某些配置更改會允許CHAR字段中的空格。 –

+1

而不是猴子如何運行mysql字段以適合您的用例,我只是改變你的用例:做一個字符替換並使用除空格之外的其他東西。或者使用varchar。我不認爲varchar(1)會比char更慢,但是YMMV。 –

相關問題