반응형
MariaDB: 데이터 수집/인코딩으로 인해 터미널 또는 SQL-client에서 코드를 실행하는 경우 다른 동작
HeidiSQL에서 sql-code (A)를 실행하면 조회로 인해 오류가 발생합니다.나는 sql-code(B)의 조합을 고려할 수 있으며, 그 후 작동합니다.그러나 터미널이나 Perl 스크립트에서 sql을 실행하면 sql-code에서 collation(B)을 고려하면 오류가 발생하지만 코드에서 collation을 제거하면 작동합니다.
환경: Windows 10, MariaDB 10.4
예:
-- Create minimal table
DROP TABLE IF EXISTS test0.x0 ;
CREATE TABLE test0.x0 (
id INTEGER
, xml_id CHAR(4)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
;
INSERT INTO test0.x0 VALUES
(1, '0-03')
, (2, '1-01')
;
하이디SQL에서 다음 코드(A)를 실행하면,
-- Code A
SET @xml_id = '0-03';
SELECT *
FROM test0.x0
WHERE xml_id = @xml_id
;
다음 오류가 발생했습니다.
/* SQL Fehler (1267): Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '=' */
조회를 고려하여 실행하는 경우(코드 B)
-- Code B
SET @xml_id = '0-03';
SELECT *
FROM test0.x0
WHERE xml_id = @xml_id COLLATE utf8mb4_unicode_ci
;
오류 없이 실행됩니다.
그러나 단말기 또는 대조(코드 B)를 고려한 스크립트에서 코드를 제출하면:
"c:\Program2\MariaDB 10.4\bin\mysql" -uroot --password=pw -h localhost test0 <i0048.sql
다음 오류가 발생합니다.
ERROR 1253 (42000) at line 8: COLLATION 'utf8mb4_unicode_ci' is not valid for CHARACTER SET 'cp850'
조회 설정(코드 A)을 제거하면 오류 없이 실행됩니다.
왜 이런 일이 일어나는지, 그리고 단말기에서 코드(B)를 실행하거나 조회 설정을 제거하는 것을 피하는 스크립트에서 어떻게 실행할 수 있는지).xml_id = @xml_id COLLATE utf8mb4_unicode_ci
) HeidiSQL 또는 터미널에서 동일한 코드를 사용하기 때문입니다.
모든 클라이언트는 고유한 문자 집합을 가지고 있습니다. 아마도 HeidiSql 선호도를 볼 수 있습니다.시도해 볼 수도 있습니다.
SET @xml_id = '0-03';
SELECT *FROM test0.x0 WHERE xml_id like @xml_id ;
언급URL : https://stackoverflow.com/questions/59423800/mariadb-different-behaviour-if-running-code-from-terminal-or-from-an-sql-client
반응형
'programing' 카테고리의 다른 글
제외 레코드 데이터에 대한 SQL 쿼리 (0) | 2023.09.03 |
---|---|
스팬 요소에 도구 팁을 추가하려면 어떻게 해야 합니까? (0) | 2023.09.03 |
CSS의 우선 순위는 무엇입니까? (0) | 2023.09.03 |
Tomcat mariadb 연결 구성 (0) | 2023.09.03 |
javascript/jquery를 사용하여 'a' 요소 클릭 시뮬레이션 (0) | 2023.09.03 |