Mybatis與資料庫的型別對應
由於業務的改變,在首次存入資料庫時某些int屬性並沒有賦值,於是預設值就開始汙染資料庫了。
下面詳細說明下,當基本資料型別定義的變數作為類的成員使用時,Java會確保給定預設值,以保證這些成員變數得到初始化,以防止產生程式錯誤。但是,這些初始值對程式來說,可能不正確,甚至是不合法的,比如在我這個工程的業務中預設值0就非法。如果一定要使用基本資料型別,最好明確地對變數進行初始化。在對應資料庫中的數值型別時,個人強烈建議使用Integer!不能因為一時的想法就去偷懶,而留下安全隱患。
基本成員預設值如下:
基本型別 | 預設值 |
boolean | false |
char | '\u0000'(null) |
byte | (byte)0 |
short | 0 |
int | 0 |
long | 0L |
float | o.of |
double | o.0d |
順便附上java實體屬性對應mysql和SQL Server 和Oracle 資料型別對應
1:Java資料型別與MySql資料型別對照表
型別名稱 | 顯示長度 | 資料庫型別 | JAVA型別 | JDBC型別索引(int) |
VARCHAR | L+N | VARCHAR | java.lang.String | 12 |
CHAR | N | CHAR | java.lang.String | 1 |
BLOB | L+N | BLOB |
java.lang.byte[] |
-4 |
TEXT | 65535 | VARCHAR | java.lang.String | -1 |
INTEGER | 4 | INTEGER UNSIGNED | java.lang.Long | 4 |
TINYINT | 3 | TINYINT UNSIGNED | java.lang.Integer | -6 |
SMALLINT | 5 | SMALLINT UNSIGNED | java.lang.Integer | 5 |
MEDIUMINT | 8 | MEDIUMINT UNSIGNED | java.lang.Integer | 4 |
BIT | 1 | BIT | java.lang.Boolean | -7 |
BIGINT |
20 | BIGINT UNSIGNED | java.math.BigInteger | -5 |
FLOAT | 4+8 | FLOAT | java.lang.Float | 7 |
DOUBLE | 22 | DOUBLE | java.lang.Double | 8 |
DECIMAL | 11 | DECIMAL | java.math.BigDecimal | 3 |
BOOLEAN | 1 | 同TINYINT | ||
ID | 11 | PK (INTEGER UNSIGNED) | java.lang.Long | 4 |
DATE | 10 | DATE | java.sql.Date | 91 |
TIME | 8 | TIME | java.sql.Time | 92 |
DATETIME | 19 | DATETIME | java.sql.Timestamp | 93 |
TIMESTAMP | 19 | TIMESTAMP | java.sql.Timestamp | 93 |
YEAR | 4 | YEAR | java.sql.Date |
91 |
*對於bolb,一般用於對圖片的資料庫儲存,原理是把圖片打成二進位制,然後進行的一種儲存方式,在java中對應byte[]陣列。
對於boolen型別,在mysql資料庫中,個人認為用int型別代替較好,對bit操作不是很方便,尤其是在具有web頁面開發的專案中,表示0/1,對應java型別的Integer較好。
2: sqlserver資料庫對應java中的資料型別
SQL Server 型別 | JDBC 型別 (java.sql.Types) | Java 語言型別 |
---|---|---|
bigint |
BIGINT |
long |
timestamp binary |
BINARY |
byte[] |
bit |
BIT |
boolean |
char |
CHAR |
String |
decimal money smallmoney |
DECIMAL |
java.math.BigDecimal |
float |
DOUBLE |
double |
int |
INTEGER |
int |
image varbinary(max) |
LONGVARBINARY |
byte[] |
varchar(max) text |
LONGVARCHAR |
String |
nchar |
CHAR NCHAR (Java SE 6.0) |
String |
nvarchar |
VARCHAR NVARCHAR (Java SE 6.0) |
String |
nvarchar(max) ntext |
LONGVARCHAR LONGNVARCHAR (Java SE 6.0) |
String |
numeric |
NUMERIC |
java.math.BigDecimal |
real |
REAL |
float |
smallint |
SMALLINT |
short |
datetime smalldatetime |
TIMESTAMP |
java.sql.Timestamp |
varbinary udt |
VARBINARY |
byte[] |
varchar |
VARCHAR |
String |
tinyint |
TINYINT |
short |
uniqueidentifier |
CHAR |
String |
xml |
LONGVARCHAR SQLXML (Java SE 6.0) |
String SQLXML |
time |
TIME (1) |
java.sql.Time (1) |
date |
DATE |
java.sql.Date |
datetime2 |
TIMESTAMP |
java.sql.Timestamp |
datetimeoffset (2) |
microsoft.sql.Types.DATETIMEOFFSET |
microsoft.sql.DateTimeOffset |
3:sqlserver和Oracle資料型別對應關係
SqlServer 2k轉換為Oracle 10g
列名 | SqlServer資料型別 | SqlServer長度 | Oracle資料型別 |
column1 | bigint | 8 | NUMBER(19) |
column2 | binary | 50 | RAW(50) |
column3 | bit | 1 | NUMBER(2) |
column4 | char | 10 | CHAR(10) |
column5 | datetime | 8 | DATE |
column6 | decimal | 9 | NUMBER(18) |
column7 | float | 8 | BINARY_DOUBLE |
column8 | image | 16 | BLOB |
column9 | int | 4 | NUMBER(10) |
column10 | money | 8 | NUMBER(19,4) |
column11 | nchar | 10 | NCHAR(10) |
column12 | ntext | 16 | NCLOB |
column13 | numeric | 9 | NUMBER(18) |
column14 | nvarchar | 50 | NVARCHAR2(50) |
column15 | real | 4 | BINARY_FLOAT |
column16 | smalldatetime | 4 | DATE |
column17 | smallint | 2 | NUMBER(5) |
column18 | smallmoney | 4 | NUMBER(10,4) |
column19 | sql_variant | BLOB | |
column20 | text | 16 | CLOB |
column21 | timestamp | 8 | RAW(8) |
column22 | tinyint | 1 | NUMBER(3) |
column23 | uniqueidentifier | 16 | BLOB |
column24 | varbinary | 50 | RAW(50) |
column25 | varchar | 50 |
VARCHAR2(50) |
Oracle 10g 轉換為SqlServer 2k
Oracle列名 | Oracle資料型別 | SqlServer列名 | SqlServer資料型別 | SqlServer資料長度 |
COLUMN1 | BINARY_DOUBLE | COLUMN1 | float | 8 |
COLUMN2 | BINARY_FLOAT | COLUMN2 | real | 4 |
COLUMN3 | BLOB | COLUMN3 | image | 16 |
COLUMN4 | CLOB | COLUMN4 | ntext | 16 |
COLUMN5 | CHAR(10) | COLUMN5 | nchar | 10 |
COLUMN6 | DATE | COLUMN6 | datetime | 8 |
COLUMN12 | NUMBER | COLUMN12 | numeric | 13 |
COLUMN13 | NVARCHAR2(10) | COLUMN13 | nvarchar | 10 |
COLUMN14 | RAW(10) | COLUMN14 | varbinary | 10 |
COLUMN15 | TIMESP(6) | COLUMN15 | datetime | 8 |
COLUMN16 | TIMESP(6) WITH LOCAL TIME ZONE | COLUMN16 | datetime | 8 |
COLUMN17 | TIMESP(6) WITH TIME ZONE | COLUMN17 | datetime | 8 |
COLUMN18 | VARCHAR2(10) | COLUMN18 | nvarchar | 10 |
COLUMN7 | INTERVAL DAY(2) TO SECOND(6) | COLUMN7 | nvarchar | 30 |
COLUMN8 | INTERVAL YEAR(2) TO MONTH | COLUMN8 | nvarchar | 14 |
COLUMN9 | LONG | COLUMN9 | ntext | 16 |
COLUMN10 | LONG RAW | COLUMN10 | image | 16 |
COLUMN11 | NCLOB | COLUMN11 | ntext | 16 |