當插入的字符串長於列允許的字符串時,我的MySQL服務器(通過Windows 2008 Server上的PDO運行)返回錯誤代碼1406(數據字段太長)。事情是我在某處讀到MySQL通常在非嚴格模式下截斷數據的地方。我更改了my.ini中的sql_mode,這樣即使在啓動時它也不會以嚴格模式進入(它當前爲「」),但它仍然給我錯誤並回滾,所以數據丟失(截斷是期望的網站行爲)。插入時自動截斷數據
我輸入到命令行,並在較短的varchar字段中插入一個長字符串,它會截斷數據並保存,但它不是。當我將模式改回嚴格時,它不會在命令行中截斷(只有錯誤)。
此外,我讓網站輸出當前的sql模式,全局和會話(@@ GLOBAL.sql_mode和@@ SESSION.sql_mode),他們都輸出「」,但只是不按需要工作。
有誰知道是什麼造成這個和/或如何改變它?
我懷疑它可能與PDO啓用PDO :: ATTR_ERRMODE = PDO :: ERRMODE_EXCEPTION,但我已閱讀,並找不到有用的東西(我真的不認爲這是肯定的解釋,但我只是把它放在那裏,以便儘可能多地瞭解這個問題)。
非常感謝您
我懷疑這是由於PDO造成的,但有一個簡單的方法來檢查:嘗試從MySQL命令行工具(或其他客戶端)插入一些過長的數據?你如何獲得'sql_mode'變量的值? – eggyal
MySQL(服務器)版本? –
好的,這可能是一個愚蠢的問題,但你爲什麼要它截斷你的數據,而不是告訴你?在我看來,如果它不能存儲你的數據,它應該報告一個錯誤並停止,而不是盲目地接受它,然後把它的一部分扔掉,如果它是一個XML或JSON,你現在不能再解析,那你會怎麼看?錯過了最後? –