오류 1366: 마리아에 문자열을 삽입할 때 잘못된 문자열 값DB
색인이 있는 MariaDB 테이블이 있습니다.VARCHAR(10) NOT NULL COLLATE 'utf8mb3_general_ci'
type. Go에 10자로 자른 문자열이 있습니다. 더 길면 이 테이블에 삽입/업데이트할 수 있습니다.다음과 같이 문자열을 자릅니다.
if len(value) > 10 {
value = value[:10]
}
현재 다음으로 끝나는 문자열에 문제가 발생했습니다.š
성격.MariaDB에서 오류 발생:Error 1366: Incorrect string value: '\\xC5'
유니코드 테이블을 검색하는 중, 이 문자는 다음과 같이 표시됩니다.\xc5\xa1
끈을 자르는 것이 데이터베이스에서 끈을 소화할 수 없게 만든다고 믿게 만드는군요?
모든 데이터베이스 방법을 검토하고 모든 문자열을 마사지해야 하기 때문에 코드에서 utf8/unicode를 처리하는 것을 피하고 싶습니다.그리고 저는 이것이 필요하다고 생각하지 않습니다. 왜냐하면 저는 전에 그것이 필요했던 적이 없었기 때문입니다.그래서 저는 문제가 다른 곳에 있다고 생각하지만 어디에 있는지는 잘 모르겠습니다.
데이터 정렬을 다음으로 전환하려고 했습니다.utf8mb4_general_ci
하지만 그것도 도움이 되지 않았습니다.
흥미롭게도 HeidiSQL로 직접 열을 편집하면 문자열이 잘 저장됩니다.그래서 이게 운전자의 문제일 수도 있다고 생각합니다.사용 중입니다.github.com/go-sql-driver/mysql
여느 때와 같이그러니 문제가 생길 것 같지는 않지만, 누가 알겠어요...
끈을 자르는 것이 데이터베이스에서 끈을 소화할 수 없게 만든다고 믿게 만드는군요?
다음과 같이 하위 분할하여 문자열 절단value[:10]
(및 길이 측정)len
프로그램이 멀티바이트 문자를 처리할 가능성이 있는 경우)는 항상 실수입니다.이는 문자열 인덱싱이 해당 바이트에서 작동하기 때문이며, 이는 멀티바이트 인코딩의 일부일 수도 있고 아닐 수도 있습니다.
당신이 알아낸 것처럼, 그 캐릭터는 UTF-8로 암호화되어 있습니다.\xc5\xa1
이 두 바이트가 사용자에게 표시되는 경우value
인덱스에서 바로 문자열9
그리고.10
당신의 색인식[:10]
데이터가 손상됩니다.
문자 집합utf8mb3
그리고.utf8mb4
승인된 UTF-8의 범위를 각각 3바이트와 4바이트 문자로 제한하지만,\xc5
UTF-8은 처음부터 유효하지 않으므로 어느 쪽이든 거부됩니다.
MariaDB에서 데이터 유형이 있는 열VARCHAR(N)
문자 수를 계산합니다(정렬로 지정됨).당신은 당신의 것을 자르고 싶습니다.value
문자열을 10바이트가 아닌 10번째 문자로 입력합니다.
내 코드에서 utf8/unicode를 처리하는 것을 피하고 싶습니다.
을 ""DB"로 을 인정하고 .utf8mb3
코드의 입력 데이터를 UTF-8로 적절하게 처리하는 것이 논리적일 뿐입니다. n번째 문자(으)로 rune
Go에서 유니코드 코드 포인트를 나타냄)는 다음과 같은 것을 사용할 수 있습니다.
// count the runes
if utf8.RuneCountInString(value) > 10 {
// convert string to rune slice
chars := []rune(value)
// index the rune slice and convert back to string
value = string(chars[:10])
}
이것은 UTF-8 인코딩을 손상시키지는 않겠지만, 예를 들어 조인자가 작성된 문자를 더 많이 할당하고 고려하지 않는다는 것을 명심하십시오.200D
관련되어 있습니다.
언급URL : https://stackoverflow.com/questions/70789977/error-1366-incorrect-string-value-when-inserting-strings-into-mariadb
'source' 카테고리의 다른 글
트리거 if-delete-clause를 생성할 수 없습니다. (0) | 2023.06.06 |
---|---|
표에 댓글을 달려면 어떻게 해야 하나요 - 마리아DB (0) | 2023.06.06 |
python 내에서 bash 스크립트 실행 중 (0) | 2023.06.01 |
NSData를 문자열로 변환하시겠습니까? (0) | 2023.06.01 |
NSTime 변환 방법간격(초)(분) (0) | 2023.06.01 |