我尝试将Array [Byte]插入二进制数据类型colunm,使用scala和play框架,并在MariaDB上滑动。 但是,我收到此错误并且未插入数据。
Execution exception
[MysqlDataTruncation: Data truncation: Incorrect string value: '\x85\x09\x9B\x08%B...' for column 'userID' at row 1]
数据是使用java.util.UUID的UUID。 转换UUID到Array [Byte]由UUIDHelper.scala实现,this code。
如何将Array [Byte]数据插入数据库?
我的环境就是这样。
数据库:
MariaDB 10.1.16
MariaDB [test]> show full columns from user;
+-----------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-----------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| userID | binary(16) | NULL | NO | PRI | NULL | | select,insert,update,references | |
| firstName | varchar(254) | utf8_general_ci | YES | | NULL | | select,insert,update,references | |
| lastName | varchar(254) | utf8_general_ci | YES | | NULL | | select,insert,update,references | |
| fullName | varchar(254) | utf8_general_ci | YES | | NULL | | select,insert,update,references | |
| email | varchar(254) | utf8_general_ci | YES | | NULL | | select,insert,update,references | |
| avatarURL | varchar(254) | utf8_general_ci | YES | | NULL | | select,insert,update,references | |
+-----------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
userID是UUID的colunm。
play-slick配置:
slick.dbs.default.driver="slick.driver.MySQLDriver$"
slick.dbs.default.db.driver="com.mysql.jdbc.Driver"
播放和scala版本:
scalaVersion := "2.11.7"
libraryDependencies ++= Seq(
"com.mohiva" %% "play-silhouette" % "3.0.2",
"org.webjars" %% "webjars-play" % "2.4.0-1",
"net.codingwell" %% "scala-guice" % "4.0.0",
"net.ceedubs" %% "ficus" % "1.1.2",
"com.adrianhurt" %% "play-bootstrap3" % "0.4.4-P24",
"com.mohiva" %% "play-silhouette-testkit" % "3.0.2" % "test",
specs2 % Test,
"com.typesafe.play" %% "play-slick" % "1.0.1",
"com.typesafe.play" %% "play-slick-evolutions" % "1.0.1",
//"com.h2database" % "h2" % "1.4.188",
"mysql" % "mysql-connector-java" % "5.1.39",
cache,
evolutions,
filters
)
答案 0 :(得分:0)
字节数组是否用于UUID?如果是这样,我建议您生成UUID的十六进制,然后
binary(16)
(我不知道Slick中替换的正确语法。)
作为旁注,recommend。
更多强>
也就是说,不尝试将您称之为“字符”的内容存储到BINARY
中。只有“bytes”(“BLOB”,而非“CLOB”)内容应存储在order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
allow from xxx.xxx.xxx.xxx
中。
答案 1 :(得分:0)
我解决了这个问题。
最终,我完全看着其他桌子。在另一个表中,也有userID,userID的数据类型是VARCHAR(254)。我将此数据类型修复为BINARY(16),并将数据插入到scala + slick上的Array [Byte]数据库中。此外,数据可以直接插入到具有java.util.UUID类型的MariaDB。
我很抱歉打扰你。