top*_*an5 6 mysql uuid jpa eclipselink varbinary
我有一个字段 id 定义如下。它是数据库中的 varbinary(16),当我通过 JPA 插入新记录时,我得到“com.mysql.jdbc.MysqlDataTruncation:数据截断:第 1 行的列“ID”的数据太长”。我究竟做错了什么?
@Id
@Column(name="ID")
private UUID id;
Run Code Online (Sandbox Code Playgroud)
AUUID
是一个 128 位数字,由由连字符 ( ) 分隔的五个十六进制数字组成的utf8 字符串'-'
表示。返回的字符串的字符长度UUID()
为'36'
。
因此,具有长度的列定义'16'
是不够的。当这样定义时,您将收到上述错误。
mysql> create table tbl_so_q24028471_vb( v varbinary(16) );
Query OK, 0 rows affected (0.42 sec)
mysql> desc tbl_so_q24028471_vb;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| v | varbinary(16) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
1 row in set (0.17 sec)
mysql> insert into tbl_so_q24028471_vb values( uuid() );
ERROR 1406 (22001): Data too long for column 'v' at row 1
Run Code Online (Sandbox Code Playgroud)
更改列定义以适应更多长度和用途。
mysql> alter table tbl_so_q24028471_vb modify column v varbinary(36);
Query OK, 0 rows affected (0.86 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> insert into tbl_so_q24028471_vb values( uuid() );
Query OK, 1 row affected (0.08 sec)
mysql> select * from tbl_so_q24028471_vb;
+--------------------------------------+
| v |
+--------------------------------------+
| 630d3270-ebba-11e3-bd03-bc8556a95cc2 |
+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7647 次 |
最近记录: |