Vapor에서 FluentMySQL을 사용하여 데이터를 저장하고 싶지만 UUID를 제대로 읽을 수 없습니다.
MariaDB에서 제공하는 UUID () 함수를 사용하면 모든 것이 정상이지만 FluentMySQL을 사용하면 UUID가 스크램블됩니다. (첫 번째 레코드 : UUID () 사용, 두 번째 레코드 : Vapor)
MariaDB [someDB]> select * from Poll;
+--------------------------------------+-------+---------+---------+--------+--------+
| id | title | option1 | option2 | votes1 | votes2 |
+--------------------------------------+-------+---------+---------+--------+--------+
| 88a18a58-2fcd-11ea-9f62-e283e8014c79 | test | bla | bla | 0 | 0 |
| 7??/.?E??*_P?v | bla | option1 | option2 | 1 | 2 |
+--------------------------------------+-------+---------+---------+--------+--------+
2 rows in set (0.00 sec)
이것은 내 모델입니다.
import Foundation
import FluentMySQL
import Vapor
struct Poll: Content, MySQLUUIDModel, Migration {
typealias ID = UUID
static let entity: String = "Poll"
var id: UUID?
var title: String
var option1: String
var option2: String
var votes1: Int
var votes2: Int
}
이것은 내 테이블입니다.
MariaDB [someDB]> describe Poll;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id | varchar(191) | YES | | NULL | |
| title | varchar(191) | YES | | NULL | |
| option1 | varchar(191) | YES | | NULL | |
| option2 | varchar(191) | YES | | NULL | |
| votes1 | int(10) | YES | | NULL | |
| votes2 | int(10) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
그러나 Vapor을 사용하여 데이터를 가져 오면 모든 것이 정상인 것 같습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
curl을 통한 출력 :
curl http://locurl http://localhost:8080/polls/list
[{"option1":"bla","id":"38386131-3861-3538-2D32-6663642D3131","title":"test","option2":"bla","votes1":0,"votes2":0},{"option1":"option1","id":"373F3F2F-2E3F-453F-3F0E-2A5F503F7607","title":"bla","option2":"option2","votes1":1,"votes2":2}]
미리 도와 주셔서 감사합니다.
Vapor을 사용하여 UUID
필드 자체 를 만드는 경우 데이터 유형이 varbinary(16)
아닌 필드 를 만듭니다 varchar(191)
. 이는 MariaDB / MySQL의 UUID 필드에 대한 기본 형식과 일치합니다.
이것이 Vapor 외부에서 데이터가 생성되는 레거시 애플리케이션이라고 가정합니까? 기본 이진 값이 아닌 UUID 값의 문자열 표현을 저장하는 것 같습니다. varchar
필드에 이진 값을 저장 하면 값이 모두 인쇄 가능하다고 가정하는 경우에만 문제가 발생합니다 (발견 한대로). 그러나 동일한 열에 문자열 및 2 진 형식 값이 혼합되면 문제가 발생할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다