in dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogBuffer.java [134:271]
static int mysqlToJavaType(int type, final int meta, boolean isBinary) {
int javaType;
if (type == LogEvent.MYSQL_TYPE_STRING) {
if (meta >= 256) {
int byte0 = meta >> 8;
if ((byte0 & 0x30) != 0x30) {
/* a long CHAR() field: see #37426 */
type = byte0 | 0x30;
} else {
switch (byte0) {
case LogEvent.MYSQL_TYPE_SET:
case LogEvent.MYSQL_TYPE_ENUM:
case LogEvent.MYSQL_TYPE_STRING:
type = byte0;
}
}
}
}
switch (type) {
case LogEvent.MYSQL_TYPE_LONG:
javaType = Types.INTEGER;
break;
case LogEvent.MYSQL_TYPE_TINY:
javaType = Types.TINYINT;
break;
case LogEvent.MYSQL_TYPE_SHORT:
javaType = Types.SMALLINT;
break;
case LogEvent.MYSQL_TYPE_INT24:
javaType = Types.INTEGER;
break;
case LogEvent.MYSQL_TYPE_LONGLONG:
javaType = Types.BIGINT;
break;
case LogEvent.MYSQL_TYPE_DECIMAL:
javaType = Types.DECIMAL;
break;
case LogEvent.MYSQL_TYPE_NEWDECIMAL:
javaType = Types.DECIMAL;
break;
case LogEvent.MYSQL_TYPE_FLOAT:
javaType = Types.REAL; // Types.FLOAT;
break;
case LogEvent.MYSQL_TYPE_DOUBLE:
javaType = Types.DOUBLE;
break;
case LogEvent.MYSQL_TYPE_BIT:
javaType = Types.BIT;
break;
case LogEvent.MYSQL_TYPE_TIMESTAMP:
case LogEvent.MYSQL_TYPE_DATETIME:
case LogEvent.MYSQL_TYPE_TIMESTAMP2:
case LogEvent.MYSQL_TYPE_DATETIME2:
javaType = Types.TIMESTAMP;
break;
case LogEvent.MYSQL_TYPE_TIME:
case LogEvent.MYSQL_TYPE_TIME2:
javaType = Types.TIME;
break;
case LogEvent.MYSQL_TYPE_NEWDATE:
case LogEvent.MYSQL_TYPE_DATE:
javaType = Types.DATE;
break;
case LogEvent.MYSQL_TYPE_YEAR:
javaType = Types.VARCHAR;
break;
case LogEvent.MYSQL_TYPE_ENUM:
javaType = Types.INTEGER;
break;
case LogEvent.MYSQL_TYPE_SET:
javaType = Types.BINARY;
break;
case LogEvent.MYSQL_TYPE_TINY_BLOB:
case LogEvent.MYSQL_TYPE_MEDIUM_BLOB:
case LogEvent.MYSQL_TYPE_LONG_BLOB:
case LogEvent.MYSQL_TYPE_BLOB:
if (meta == 1) {
javaType = Types.VARBINARY;
} else {
javaType = Types.LONGVARBINARY;
}
break;
case LogEvent.MYSQL_TYPE_VARCHAR:
case LogEvent.MYSQL_TYPE_VAR_STRING:
if (isBinary) {
// varbinary在binlog中为var_string类型
javaType = Types.VARBINARY;
} else {
javaType = Types.VARCHAR;
}
break;
case LogEvent.MYSQL_TYPE_STRING:
if (isBinary) {
// binary在binlog中为string类型
javaType = Types.BINARY;
} else {
javaType = Types.CHAR;
}
break;
case LogEvent.MYSQL_TYPE_GEOMETRY:
javaType = Types.BINARY;
break;
// case LogEvent.MYSQL_TYPE_BINARY:
// javaType = Types.BINARY;
// break;
//
// case LogEvent.MYSQL_TYPE_VARBINARY:
// javaType = Types.VARBINARY;
// break;
default:
javaType = Types.OTHER;
}
return javaType;
}