http://www.delphigroups.info/2/3a/288172.html
http://delphi.about.com/library/weekly/aa030105a.htm
Blob필드를 OnGetText 이벤트를 사용해서 문자열로 나오게 해주는 방법인데 VARBYTE로 표시되는 것도 해결되는 모양입니다. 한번 참고해 보시길...
박준규 님이 쓰신 글 :
: 이미지 파일은 각각
: 1. 프로그램 실행상태
: 2. MYSQL 테이블 상태
: 3. MYSQL 문자셋 상태
:
:
: DB로 간단한 프로그램을 짜고 있는데 언어셋 문제에서 난관에 봉착했습니다.
: 일주일이 넘어가는데 도통 답이 안보여서 질문까지 하게되었습니다.
:
: 문제사항은 DBGrid의 값들이 숫자가 아닌 문자 자료형이면 VARBYTE로 표기되는것입니다.
:
: SQL쿼리 날린 결과값을 반복문으로 돌려가면서 Memo등에 출력하면 한글이 정상적으로 표기되는데
: DBGRID만 꼭 저렇게 나오네요, 구글링 해보니 저런 사례가 간혹가다 있는데 해결된걸 못봤습니다.
:
: 수작업으로 출력한 결과 SQLQuery1 과 ClientDataSet1까지는 자료가 한글로 잘 넘어와서 메모장에
: 출력됩니다만 DataSource1 거쳐서 DBGrid만 들어가면 문자들이 저렇게 나와버립니다.
:
: DB그리드는 기본 TDBGrid와 Raize 컴포넌트의 RzDBGRID 둘다 저모양으로 나옵니다.
:
: 아래는 환경사항입니다
:
: - 툴은 C++Builder6, DB는 MYSQL 5.1.41-community 입니다(MySQL 문자셋: UTF-8 Unicode (utf8))
: - 컴포넌트는 DBGrid와 DBexpress를 사용했습니다
: - 드라이버 파일은 포럼에서 받은 빌더용 MySQL 5.x 드라이버를 사용하였습니다.
: - 테스트 시 문자셋은 가능한한 모두 UTF8로 통일 했으며 EUCKR로 통일한 상태에서도 같은 증상이 발생합니다
: - set name 을 사용해서 각각 euckr과 utf8로 해줘도 같은 VARBYTE 상태로 표기됩니다
: - ClientDataSet1 이나 SQLQuery1 를 반복문으로 돌려서 레코드 값을 Memo1에 찍어보면 한글이 잘나옵니다
: - 컴포넌트 는 각각 연결해주는 값만을 설정하였으며 별도 내용은 손보지 않았습니다.
:
:
: 아래는 예제의 소스 입니다.
:
: bool __fastcall TForm1::DBconnection()
: {
: bool bResult = false;
: __try
: {
: try
: {
: SQLConnection1->DriverName = "dbxmysql";
: SQLConnection1->GetDriverFunc = "getSQLDriverMYSQL50";
: SQLConnection1->LibraryName = "dbxopenmysql50.dll";
: SQLConnection1->Params->Clear();
: SQLConnection1->Params->Values["User_Name"] = "root";
: SQLConnection1->Params->Values["Password"] = "apmsetup";
: SQLConnection1->Params->Values["HostName"] = "127.0.0.1";
: SQLConnection1->Params->Values["Database"] = "mdsi_lab_erp";
: SQLConnection1->Open();
: //SQLQuery1->SQL->Clear();
: //SQLQuery1->SQL->Add("set names euckr");
: //SQLQuery1->SQL->Add("set names utf8");
: //SQLQuery1->ExecSQL();
: bResult = true;
: }
: catch(Exception &E){
: //..
: }
: }
: __finally{return bResult;}
: }
:
:
:
: 아래는 각 DBExpress 컴포넌트값들의 설정입니다
: [SQLConnection1]
: Connected = true
: ConnectionName = MYSQL
: DriverName = dbxmysql
: GetDriverFunc = getSQLDriverMYSQL50
: KeepConnection = true
: LibraryName = dbxopenmysql50.dll
: Name = MYSQLCon
: VendorLib=libmysql.dll
:
: [SQLDataSet1]
: SQLConnection = SQLConnection1
:
: [DataSEtProvider1]
: Constraints = true
: DataSet = MySQLQuery
: Exported = true
: Name = DataSetProvider1;
:
: [ClientDataSet1]
: Active = true;
: ProviderName = DataSetProvider1;
:
: [DataSource1]
: DataSet = ClientDataSet1
: Enabled = true
:
: [MySQLQuery]
: SQLConnection = MySQLCon
: SQL = SELECT * FROM mdsi_afterservice
:
: [SQLClientDataSet1]
: FetchOnDemand = true;
:
:
: 이상입니다, 도데체 어디가 문제길래 저렇게 나오는걸까요. 많은 답변 부탁드립니다.