[英]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.