mysql 编码、模式问题

如果你想在不修改表字段结构的情况下,又想保存所有数据,可以尝试一下方法

报错ER_DATA_TOO_LONG

设置sql_mode模式(mysql5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES)

模式 详情
ANSI 宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
TRADITIONAL 严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
STRICT_TRANS_TABLES 严格模式,进行数据的严格校验,错误数据不能插入,报error错误。
  1. /etc/my.cnf或者在my.ini里找到
    sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    把其中的STRICT_TRANS_TABLES去掉
  2. 运行以下命令
    set global sql_mode=”ANSI”
    set @@sql_mode=ANSI;
    select @@sql_mode;//查看当前模式

报错ER_TRUNCATED_WRONG_VALUE_FOR_FIELD这个是中文编码问题,即使是utf8格式下也会出现

1.在/etc/my.cnf或者在my.ini里(设置utf8mb4编码格式)

1
2
3
4
5
6
7
[client]
default-character-set = utf8
[mysqld]
character-set-client-handshake = false
character-set-server = utf8
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'