插入中文錯誤ERROR 1406 (22001): Data too long for column 'name' at row 1


1、在導入數據前執行以下命令即可:
set SESSION sql_mode='';

通過設置sql_mode變量更改模式。linux下安裝完mysql后,默認的sql-mode值是空,在這種情形下mysql執行的是一種不嚴 格的檢查,例如日期字段可以插入’0000-00-00 00:00:00’這樣的值,還有如果要插入的字段長度超過列定義的長度,那么mysql不會終止操作,而是會自動截斷后面的字符繼續插入操作。

 

但是如果我們本意希望如果長度超過限制就報錯,那么我們可以設置sql_mode為STRICT_TRANS_TABLES,如下:
    mysql> set session sql_mode='STRICT_TRANS_TABLES'
這樣我們再執行同樣的操作,mysql就會告訴我們插入的值太長,操作被終止,如下:
    mysql> insert into t5 values('abcd');
    ERROR 1406 (22001): Data too long for column 'c1' at row 1

 

SQL Mode與數據效驗SQL Mode 還可以實現對數據效驗和轉移等功能如:

  1. 效驗日期數據合法性.
  2. 在INSERT或UPDATE過程中,如果被零除(或MOD(X,0)),則產生錯誤
  3. 將‘"’視為識別符引號(‘`’引號字符)
  4. 禁用反斜線字符(‘\’)做為字符串內的退出字符。啟用NO_BACKSLASH_ESCAPES模式,反斜線則成為普通字符。
  5. 將||視為字符串連接操作符(+)(同CONCAT()),而不視為OR。
經常使用的sql_mode值
Sql_mode值 描述
ANSI 更改語法和行為,使其更符合標准SQL。
STRICT_TRANS_TABLES 如果不能將給定的值插入到事務表中,則放棄該語句。對於非事務表,如果值出現在單行語句或多行語句的第1行,則放棄該語句。本節后面給出了更詳細的描述。
TRADITIONAL Make MySQL的行為象“傳統”SQL數據庫系統。該模式的簡單描述是當在列中插入不正確的值時“給出錯誤而不是警告”。注釋:一旦發現錯誤立即放棄 INSERT/UPDATE。如果你使用非事務存儲引擎,這種方式不是你想要的,因為出現錯誤前進行的數據更改不會“滾動”,結果是更新“只進行了一部 分”。

說明:如果把sql_mode的值設置成后面的兩個值(也就是我們說的嚴格模式), 那么當在列中插入或更新不正確的值時,mysql將會給出錯誤,並且放棄insert/update操作。在我們的一般應用中建議使用這兩種模式,而不是 使用默認的空或ANSI模式。但是需要注意的問題是,如果數據庫運行在嚴格模式下,並且你的存儲引擎不支持事務,那么有數據不一致的風險存在,比如一組 sql中有兩個dml語句,如果后面的一個出現了問題,但是前面的已經操作成功,那么mysql並不能回滾前面的操作。因此說設置sql_mode需要應 用人員權衡各種得失,從而得到一個合適的選擇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM