例:
CREATE TABLE td_m_funcright11
(RIGHT_CODE
VARCHAR(30) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (RIGHT_CODE
)
);
INSERT INTO td_m_funcright11 VALUES('1'),('2'),('1 ');
错误:Error Code: 1062 - Duplicate entry '1 ' for key 'PRIMARY'
描述:
插入的值第一个及第三个系统认为是是主键重复,但实际上这两个值length()长度是不一样的,是否意味着存储的时候默认把1尾部后面的空格去掉了?但如果在这个1 前面加再空格就能插入。本人小白表示不太理解,请各位大神给帮忙解释下。
遇到这个问题是因为从ORACLE的数据转到MYSQL中,ORACLE库中存在两条主键字段值一条尾部包含空格 ,一条不包含的值,导入MYSQL中就只能插一条,再插就会报主键冲突,各位大侠有啥好的办法,想保留这两条记录又得是主键。。。
values ('1','2','3 ') 不应该是这样的吗? 你那样写可以吗?感觉怪怪的。
如果字段是char或varchar类型,那么在字符串比较的时候MySQL使用PADSPACE校对规则,会忽略字段末尾的空格字符。
若想做到精确匹配可以使用下面几种方法:
方法1:使用like语句;
方法2:使用binary类型,例如,select binary 'a' = 'a '
方法3:再添加一个length()条件,例如,select col from table where col = 'a ' and LENGTH(col) = LENGTH('a ')