繁体   English   中英

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

[英]How to insert Array[Byte] into binary datatype column with slick and mariadb?

我试图使用scala将Array [Byte]插入二进制数据类型colunm,并在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 将此代码实现的

如何将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的字段。

流畅的配置:

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
)

字节数组是否用于UUID? 如果是这样,建议您生成UUID的十六进制,然后

INSERT ... (uuid, ...)
    VALUES
    (UNHEX(?), ...)

(我不知道Slick中替换的正确语法。)

附带说明一下, UUID很难扩展

更多

也就是说, 不要试图保存你在呼唤“字”成binary(16) 只能将“ bytes”(“ BLOB”,而不是“ CLOB”)内容存储在BINARY

我解决了问题。

最终,我完全看了另一张桌子。 在另一个也具有userID的表中,userID的数据类型为VARCHAR(254)。 我将此数据类型固定为BINARY(16),并使用scala + slick上的Array [Byte]将数据插入到数据库中。 此外,可以使用java.util.UUID类型将数据直接插入到MariaDB中。

对不起,麻烦您了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM