체크 제약 조건이 0.00보다 큰 DECTIVE 열에 값을 삽입하면 SQL 오류 1292 잘못된 DOUBLE 값이 표시됩니다.
10.5.10-마리아DB
저는 test1과 test2 두 테이블이 있습니다.각 열에는 데이터 유형 DECTIC(5,2)의 'a_number' 열이 하나 있습니다. test1에는 CHECK('a_number' > 0.00) 제약 조건이 있습니다.test2는 검사 제약 조건이 삭제된 test1의 테이블 복사본입니다.1.23의 test2에 단일 값을 추가하였습니다.
다음 쿼리를 실행할 때
INSERT INTO test1 (a_number)
SELECT a_number FROM test2;
SQL 오류(1292)가 발생함 - 잘못된 DOUBLE 값 'a_number'이(가) 잘림
| test1 | CREATE TABLE `test1` (
`a_number` decimal(5,2) NOT NULL,
CONSTRAINT `CC1` CHECK ('a_number' > 0.00)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
| test2 | CREATE TABLE `test2` (
`a_number` decimal(5,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC |
SELECT * FROM test2;
+----------+
| a_number |
+----------+
| 1.23 |
+----------+
인터넷 검색에서 서로 다른 데이터 유형을 비교하기 때문에 오류가 발생하는 것으로 나타났습니다.CHECK에서 문자열에서 10진수로 변환하기 위해 리터럴에 CAST를 추가하려고 했지만 효과가 없었습니다.일부 게시물에서 제안하는 것처럼 단일 따옴표를 추가하는 것도 작동하지 않았습니다(오류는 사라졌지만 제약 조건은 작동하지 않았습니다). 이제 체크 리터럴을 문자열로 처리하고 있다는 것을 나타냅니다.
그것은 까다로운 것이었습니다.
제약 조건 단일 따옴표 검사에서 사용했으므로 maradb는 'a_namber' 텍스트를 숫자와 비교하여 오류 메시지가 표시됩니다.
다음 스레드를 주의 깊게 읽어주세요 MySQL에서 싱글따옴표, 더블따옴표, 백탁표를 사용할 때
CREATE TABLE `test1` (
`a_number` decimal(5,2) UNSIgNED NOT NULL,
CONSTRAINT `CC1` CHECK (`a_number` > 0.00)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `test2` (
`a_number` decimal(5,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
INSERT INTO test2 VALUES (1.1)
INSERT INTO test1 (a_number) SELECT a_number FROM test2
✓
SELECT * FROM test1
a_숫자 || -------: || 1.10 |
db<>여기로 이동
언급URL : https://stackoverflow.com/questions/68764995/inserting-value-into-decimal-column-with-check-constraint-0-00-gives-sql-error
'programing' 카테고리의 다른 글
mysqdump와 일관된 InnoDB 덤프 (0) | 2023.06.28 |
---|---|
HATEOAS 메서드를 찾을 수 없습니다. (0) | 2023.06.28 |
Spring boot "spring-boot-starter-mail"을 통해 전자 메일 보내기 (0) | 2023.06.23 |
막대 그래프에서 Y축 수치를 백분율로 변경하려면 어떻게 해야 합니까? (0) | 2023.06.23 |
Oracle SQL Developer용 JDK 설치의 전체 경로 이름 (0) | 2023.06.23 |