programing

MariaDB: 데이터 수집/인코딩으로 인해 터미널 또는 SQL-client에서 코드를 실행하는 경우 다른 동작

copyandpastes 2023. 9. 3. 18:13
반응형

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

반응형