如何使用slick和mariadb将Array [Byte]插入二进制数据类型列?

时间:2016-09-07 13:05:09

标签: mysql scala playframework mariadb slick

我尝试将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
)

2 个答案:

答案 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。

我很抱歉打扰你。