2016-08-04 56 views
0

我已經在MySQL創建一個表作爲MySQL的比特值出口DML問題

create table bittest (id int(11),constant bit(1) default b'0'); 

然後,

insert into bittest(id) values (1); 

選擇查詢得到打印爲

+------+----------+ 
| id | constant | 
+------+----------+ 
| 1 |   | 
+------+----------+ 
1 row in set (0.00 sec) 

顯然的常數值沒有顯示爲位。

當我使用mysqldump INSERT語句做出口被導出爲

INSERT INTO `bittest2` VALUES (1,'\0'); 

這是造成問題,因爲我不希望空值插入做。

有沒有解決這個問題的方法? MySQL版本5.7.13

+0

的可能的複製[使用SELECT時無法看到MySQL的位字段值(http://stackoverflow.com/questions/14248554/cant-see-mysql-bit-field-使用時選擇的值) – Solarflare

+0

問題是類似的,但是不能解決導出問題。 – rohitpal

+1

'\ 0'不是'null'。我不確定爲什麼鏈接的問題沒有回答你的問題,但'b'0'與'\ 0'是一樣的('\ 0'中的所有位都是0,它通常不是8位想想當你看到'\ 0'時)。一點不是一個整數,如果你重新導入它(用你的'insert')就可以正常工作。它實際上也會與0一起工作,因爲它會正確地轉換它,但位不是整數。如果你想有一個整數,可以使用一個整數'tinyint(1)'或其同義詞'bool'。 (在某些版本之前,mysql曾使用'tinyint'作爲'bit',但將其更改爲更符合標準)。 – Solarflare

回答

1

它在5.7.13上正常工作。對於命令行工具中的屏幕可顯示的內容,您錯誤地將輸出值設爲0。

它出口很好,它進口很好。並且此查詢顯示第1行:

select * from bittest where constant=b'0'; 

無論您是否期望0的位值在顯示屏上都是人類可讀的。

導出的:

mysqldump -u UserName -p so_gibberish > c:\nate\bittest.sql 

我們根本沒有在這裏解決問題。

的mysqldump:

enter image description here

0

您可以使用hex-blob選項與mysqldump

mysqldump -u[user-name] -p [db-name] [table-name] --hex-blob > [file-name].sql

然後,SQL文件顯示以下值。

  • b'0'0x00
  • b'1'0x01

你可以正確導入轉儲文件。

更多信息:Does mysqldump handle binary data reliably?