[Mysql]由Data truncated for column聯想到的sql_mode配置,truncatedsql_mode

來源:互聯網
上載者:User

[Mysql]由Data truncated for column聯想到的sql_mode配置,truncatedsql_mode

系統日誌中出現了

ata truncated for column 'agent' at row 1


mysql出現這個問題的原因,無非就是字元集設定 或者是 欄位過長導致的。

mysql在初始化的時候已經統一為utf-8了,所以可以忽略這個問題。
字串過長從而匯入插入失敗一種方式是修改欄位長度,可是我這個欄位沒法知道到底多長儲存合適,不太好一種方式是在程式中截取字串,這個方法可行,也比較好。
但是我又想了想,以前的時候為啥會自動截斷,這次就插入不進去了了呢?原因是mysql的sql_mode設定的問題,那麼就來看看這個配置項吧。
先來看看myql資訊版本 | version                 | 5.0.77-log 

查看sqlmode設定mysql> SHOW  GLOBAL VARIABLES LIKE '%sql_mode%';+---------------+-------+| Variable_name | Value |+---------------+-------+| sql_mode      |       |+---------------+-------+1 row in set
也可以這個麼查詢mysql> SELECT @@global.sql_mode;+-------------------+| @@global.sql_mode |+-------------------+|                   |+-------------------+1 row in set
預設這項是空的,在這種設定下是可以允許一些非法操作的,比如允許一些非法資料的插入。 這個應該是資料庫初始化應該做的工作,這裡就是經驗的不足。
看下官方文檔:http://dev.mysql.com/doc/refman/5.0/en/sql-mode.html設定項很多,根據需要選擇級就可以了。
ANSI:等同於REAL_AS_FLOAT、PIPES_AS_CONCAT和ANSI_QUOTES、IGNORE_SPACE的組合。
ORACLE:等同於PIPES_AS_CONCAT、 ANSI_QUOTES、IGNORE_SPACE、 NO_KEY_OPTIONS、 NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS和NO_AUTO_CREATE_USER的組合。  TRADITIONAL:等同於STRICT_TRANS_TABLES、 STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、 ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER和 NO_ENGINE_SUBSTITUTION的組合。  MSSQL:等同於PIPES_AS_CONCAT、 ANSI_QUOTES、 IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS和 NO_FIELD_OPTIONS的組合。  DB2:等同於PIPES_AS_CONCAT、ANSI_QUOTES、 IGNORE_SPACE、NO_KEY_OPTIONS、 NO_TABLE_OPTIONS和NO_FIELD_OPTIONS的組合。  MYSQL323:等同於NO_FIELD_OPTIONS和HIGH_NOT_PRECEDENCE的組合。  MYSQL40:等同於NO_FIELD_OPTIONS和HIGH_NOT_PRECEDENCE的組合。  MAXDB:等同於PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、 NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS和 NO_AUTO_CREATE_USER的組合。
修改配置:首先設定本次mysql進程有效,然後在設定檔中在設定,保證一直生效,我想讓myql截取儲存,所以用ansi模式。

當前進程
mysql> set global sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER';

設定檔
sql-mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER'

設定完之後進入mysq檢查一下
參考:http://technoboy.iteye.com/blog/1004905

本文出自 “orangleliu筆記本” 部落格,轉載請務必保留此出處http://blog.csdn.net/orangleliu/article/details/41778595

作者orangleliu 採用署名-非商業性使用-相同方式共用協議


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.