MySQL Connector/J 在处理 MySQL 数据类型和 Java 数据类型之间的转换方面非常灵活。
        通常,任何 MySQL 数据类型都可以转换为
        java.lang.String,任何数字类型都可以转换为任何 Java 数字类型,尽管可能会出现舍入、溢出或精度损失。
      
        Connector/J 按照 JDBC 规范的要求发出警告或抛出
        DataTruncation异常,除非通过使用属性将连接配置为不这样做
        jdbcCompliantTruncation并将其设置为
        false.
      
下表列出了始终保证有效的转换。第一列列出了一种或多种 MySQL 数据类型,第二列列出了一种或多种 MySQL 类型可以转换为的 Java 类型。
表 6.19 MySQL 和 Java 数据类型之间可能的转换
| 这些 MySQL 数据类型 | 总是可以转换为这些 Java 类型 | 
|---|---|
| CHAR, VARCHAR, BLOB, TEXT, ENUM, and SET | java.lang.String, java.io.InputStream, java.io.Reader,
              java.sql.Blob, java.sql.Clob | 
| FLOAT, REAL, DOUBLE PRECISION, NUMERIC, DECIMAL, TINYINT,
              SMALLINT, MEDIUMINT, INTEGER, BIGINT | java.lang.String, java.lang.Short, java.lang.Integer,
              java.lang.Long, java.lang.Double,
              java.math.BigDecimal | 
| DATE, TIME, DATETIME, TIMESTAMP | java.lang.String, java.sql.Date, java.sql.Timestamp | 
如果您选择的 Java 数字数据类型的精度或容量低于您正在转换的 MySQL 数据类型,则可能会发生舍入、溢出或精度丢失。
        该ResultSet.getObject()方法使用 MySQL 和 Java 类型之间的类型转换,并在适当的地方遵循 JDBC 规范。ResultSetMetaData.GetColumnTypeName()和
        返回的值
        ResultSetMetaData.GetColumnClassName()
        如下表所示。有关 JDBC 类型的更多信息,请参阅有关
        java.sql.Types
        类的参考资料。
      
表 6.20 ResultSetMetaData.GetColumnTypeName() 和 ResultSetMetaData.GetColumnClassName() 的 MySQL 类型和返回值
| MySQL 类型名称 | 的返回值 GetColumnTypeName | 的返回值 GetColumnClassName | 
|---|---|---|
| BIT(1) | BIT | java.lang.Boolean | 
| BIT( > 1) | BIT | byte[] | 
| TINYINT(1) SIGNED, BOOLEAN | 
                  如果 
                  如果 
                  如果 | 
                  如果 
                  如果 
                  如果 | 
| TINYINT( > 1) SIGNED | TINYINT | java.lang.Integer | 
| TINYINT( any ) UNSIGNED | TINYINT UNSIGNED | java.lang.Integer | 
| SMALLINT[(M)] [UNSIGNED] | SMALLINT [UNSIGNED] | java.lang.Integer(不管有UNSIGNED没有) | 
| MEDIUMINT[(M)] [UNSIGNED] | MEDIUMINT [UNSIGNED] | java.lang.Integer(不管有UNSIGNED没有) | 
| INT,INTEGER[(M)] | INTEGER | java.lang.Integer | 
| INT,INTEGER[(M)] UNSIGNED | INTEGER UNSIGNED | java.lang.Long | 
| BIGINT[(M)] | BIGINT  | java.lang.Long | 
| BIGINT[(M)] UNSIGNED | BIGINT UNSIGNED | java.math.BigInteger | 
| FLOAT[(M,D)] | FLOAT | java.lang.Float | 
| DOUBLE[(M,B)] [UNSIGNED] | DOUBLE | java.lang.Double(不管有UNSIGNED没有) | 
| DECIMAL[(M[,D])] [UNSIGNED] | DECIMAL | java.math.BigDecimal(不管有UNSIGNED没有) | 
| DATE | DATE | java.sql.Date | 
| DATETIME | DATETIME | java.time.LocalDateTime | 
| TIMESTAMP[(M)] | TIMESTAMP | java.sql.Timestamp | 
| TIME | TIME | java.sql.Time | 
| YEAR[(2|4)] | YEAR | 如果 yearIsDateType配置属性设置为false,则返回的对象类型为java.sql.Short。如果设置为true(默认值),则返回的对象的类型为java.sql.Date。 | 
| CHAR(M) | CHAR | java.lang.String | 
| VARCHAR(M) | VARCHAR | java.lang.String | 
| BINARY(M),CHAR(M) BINARY | BINARY | byte[] | 
| VARBINARY(M),VARCHAR(M) BINARY | VARBINARY | byte[] | 
| BLOB | BLOB | byte[] | 
| TINYBLOB | TINYBLOB | byte[] | 
| MEDIUMBLOB | MEDIUMBLOB | byte[] | 
| LONGBLOB | LONGBLOB | byte[] | 
| TEXT | TEXT | java.lang.String | 
| TINYTEXT | TINYTEXT | java.lang.String | 
| MEDIUMTEXT | MEDIUMTEXT | java.lang.String | 
| LONGTEXT | LONGTEXT | java.lang.String | 
| JSON | JSON | java.lang.String | 
| GEOMETRY | GEOMETRY | byte[] | 
| ENUM('value1','value2',...) | CHAR | java.lang.String | 
| SET('value1','value2',...) | CHAR | java.lang.String |