2016-09-15 73 views
1

我正在使用PHP + MySQL應用程序。該應用程序爲我工作得很好。但是,當我主持它的另一臺服務器,我有一個MySQL錯誤:將缺省值設置爲數據庫中的所有列

Error Code: 1364. Field 'field' doesn't have a default value

我知道這是MySQL的版本出現問題,我們應該爲所有列設置默認值。但目前我有超過100張桌子。所以我需要爲所有表中沒有默認值的所有列設置默認值NULL

我無法使用strict mode選項,因爲服務器是共享的。是否可以設置一個步驟而不是設置每個表格?如果不可能告訴我最簡單的方法來設置它。

任何幫助,將不勝感激

+0

有人低估了這個問題。不知道爲什麼? –

+0

我減輕了這一點,你的問題並沒有那麼糟糕;)要修改它在數據庫端而不改變模式,你必須改變你的列以給它們一個默認值。 [我如何修改mysql表列的默認值?](http:// stackoverflow。com/questions/1770203/how-do-i-alter-a-mysql-table-column-defaults)可能會有所幫助。 –

+0

hmm..okay ..是否有可能在整個數據庫的單個查詢中? –

回答

0

,我發現另一種解決方案是這樣的: -

獲取所有列的名稱把它在陣列... 現在將值列陣列插入 - 與所有這些數組的ZERO值都沒有值。 例如: 在一個表中,我們有COLUMN 名姓氏COMPNAME PHONO電子郵件地址ALTERPERSON ALTERPHONE ALTEREMAIL 現在遷移後,我們看到了eeror

Error Code: 1364. Field 'field' doesn't have a default value

如果我們運行一個INSERT查詢LIKE

mysqli_query($con,'insert into table (NAME,LASTNAME,COMPNAME,PHONO,EMAIL,ADDRESS) values (NAME,LASTNAME,COMPNAME,PHONO,EMAIL,ADDRESS)')

現在它會給出錯誤...

所以只需打開表 從DB獲取所有列值。TABLE 把它放在一個數組中,或使用while循環或for循環一個接一個地執行...

檢查每列的插入值 如果插入值等於零或NULL,則插入零,然後插入零解決所有問題。

爲什麼ZERO -

,因爲它會爲VARCHAR,TEXT,INT,BIGINT和除了時間或日期功能和日期/時間數據類型許多數據類型的工作在默認情況下得到了零個值...

===============================另一個選項...

運行一個PHP代碼 get all TABLE名稱 然後對於每個TABLE名稱 獲取所有COLUMN名稱

和在功能上運行此命令下循環

ALTER TABLE DB.TABLEnAME CHANGE columnNAME_A columnNAME_A VARCHAR(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;

=======================

並對其做

相關問題