2017-08-02 21 views
0
My SQLite3 table consists the following data: 

ID   site_name site_type_code site_type cache_type php   letsencrypt mysql  
---------- ---------- -------------- ---------- ---------- ---------- ----------- ---------- 
17   four.com php    PHP   disabled 5.6   disabled  no 

當我嘗試使用更新幾列:更新命令給出奇怪的結果

UPDATE ee_site_data 
SET 
    site_type_code="php", 
    site_type="PHP", 
    php="7.0", 
    cache_type="disabled", 
    mysql="no", 
    letsencrypt="disabled" 
WHERE site_name="four.com" 

我得到這個作爲輸出:

ID   site_name site_type_code site_type cache_type php   letsencrypt mysql  
---------- ---------- -------------- ---------- ---------- ---------- ----------- ---------- 
17   four.com 5.6    5.6   disabled 7.0   disabled  no 

site_type_codesite_type都有值如5.6

我不知道爲什麼會發生這種情況! 我的表架構如下:

CREATE TABLE `ee_site_data` (
    `ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    `site_name` TEXT NOT NULL UNIQUE, 
    `site_type_code` TEXT NOT NULL, 
    `site_type` TEXT NOT NULL, 
    `cache_type` TEXT, 
    `php` TEXT, 
    `letsencrypt` TEXT, 
    `mysql` TEXT 
); 
+0

您是否確定上述'UPDATE'是您實際運行的?我不明白這是如何發生的,除非通過運行另一個更新來爲這兩列分配'5.6'。 –

+0

@TimBiegeleisen是的,我跑完了。我複製從終端本身粘貼他們。 –

回答

1

SQLite中逃脫列名的方法是使用雙引號。因此,當您進行以下兩個任務,你實際上是指php

site_type_code = "php" 
site_type = "PHP" 

但雙引號也出現過載爲表示字符串文字。因此,在下面的任務你被分配給字符串文字:

php = "7.0" 
cache_type = "disabled" 
mysql = "no" 
letsencrypt = "disabled" 

,因爲這些名字沒有列存在,右手分配默認字符串文字。

要完全避免這種不確定性,你應該運行下面的查詢:

UPDATE ee_site_data 
SET 
    site_type_code = 'php', 
    site_type = 'PHP', 
    php = '7.0', 
    cache_type = 'disabled', 
    mysql = 'no', 
    letsencrypt = 'disabled' 
WHERE site_name = 'four.com' 

此查詢使用單引號中適當的字符串文字,而且沒有意外指的是列機會。

+0

該解釋幫助了很多!謝謝! –