최근 Linux에 Oracle 10gR2를 설치한 후 문자 집합이 왜곡되는 문제가 발생했습니다. 이전에 온라인으로 검색한 후 해결한 후 그대로 두었습니다. 이번에도 이런 문제가 발생하여 시간이 좀 걸렸습니다. 몇번의 테스트를 거쳐 문제가 해결되었습니다. 이제 제가 겪은 문제와 해결책을 나중에 찾아볼 수 있도록 기록하겠습니다.
테스트 환경은 다음과 같습니다.
테스트 플랫폼: VMware? Workstation 9.0.2 build-1031769 (참고: VM은 32비트와 64비트로 구분되지 않지만 64비트 운영체제를 설치하면 오류가 발생하며 이에 대한 설명은 아래와 같습니다. )
운영체제 : Linux RedHat5.6 64비트 운영체제
데이터베이스 버전: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit
1. VM 플랫폼에서 비트 리눅스 운영체제나 기타 64비트 운영체제에서 오류가 발생했습니다.
1. 이전 설치는 모두 32비트 리눅스 운영체제였기 때문에 새 회사로 전환하여 64비트를 사용하기 전까지는 괜찮았습니다. -bit Linux. 이 문제가 발생하여 VM에 직접 64비트를 설치했습니다. Linux를 사용할 때 운영 체제의 비트 수가 VM 플랫폼의 비트 수와 다르다고 보고됩니다. 특정 프롬프트를 잊어버렸습니다.) 다음 프롬프트와 유사합니다: "이 가상 머신이 64비트 게스트 운영 체제를 사용하도록 구성했습니다. 그러나 64비트 작업은 불가능합니다. 이 호스트는 VT를 지원하지 않습니다." 이 문제를 해결하려면 시스템의 VT 지원, 즉 자체 컴퓨터의 BIOS 가상화 기술을 활성화해야 합니다. 이는 특정 개인용 컴퓨터가 가상화 기술을 지원하는지 여부에 따라 달라집니다. 컴퓨터의 CPU가 있는지 확인하는 도구가 있습니다. 마더보드는 가상화를 지원합니다. Baidu에서 찾을 수 있습니다. 이제 BIOS에서 가상화 기술을 켠 후 Linux를 다시 설치하면 됩니다.
2. Oracle은 Linux에서 중국어 문자가 깨져 표시됩니다.
1. Oracle 데이터베이스에서 문자가 깨지는 이유:
운영체제는 서버와 일치하지만 클라이언트와 서버 문자 집합이 일치하지 않습니다.
클라이언트와 서버는 일치하지만 운영 체제와 서버는 일치하지 않습니다.
2. 해결 방법:
운영 체제, 클라이언트 및 데이터베이스 서버의 문자 집합이 일치하도록 관련 문자 집합을 설정합니다. 동일합니다.
3. 상황에 따라:
서버의 문자 집합이 UTF8인 경우 클라이언트의 문자 집합을 서버와 일치하도록 설정합니다. 데이터베이스 생성, 중국어와 영어 모두 호환됩니다.
클라이언트 Linux 설정 단계:
1. oracle 데이터베이스의 설치 사용자로 전환합니다. 내 사용자 이름은 oracle
$ su oracle
$ cd입니다. ~ $ vim .bash_profile // oracle 사용자 아래에서 .bash_profile 파일을 편집합니다. ~ PATH=$PATH:$HOME/bin:/usr/bin:/usr/sbin:/sbin
내보내기 경로
내보내기 ORACLE_SID=orcl
내보내기 ORACLE_BASE=/u01/app/oracle
내보내기 ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
내보내기 PATH=$PATH:$ORACLE_HOME/bin
> /lib
CLASSPATH 내보내기 =$ORACLE_HOME/JRE:ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
NLS_LANG=AMERICAN_AMERICA.UTF8 |参数也没问题,建议是最好规划好自己的库需要用到什么时候类型 字体,然后再设置这个值,最好䝿持与数据库一致,当然这个参数可以随时改变. UTF8字符集)
$ source .bash_profile //执行source命令使修改完的.bash_profile文件生效
至此,设置完毕,再次登录Oracle数据库,查询显示正常,但有一点要注意,就是如果你插入数据时的字符集不是UTF8下执行的,当你客户端 and 服务器变成UTF8字符集后,以后插入的中文可能显示就为乱码了。所以说只有三个点(客户端、
제가 사용하는 운영체제는 LINUX이므로 Linux 플랫폼에 대해서는 저만의 방법만 말씀드리겠습니다. 중국어 글꼴을 테스트하기 위해 가상머신에 Linux+Oracle을 설치했기 때문에 Linux에 직접 중국어를 설치하여 직접 입력하여 테스트하는 방법을 선택했습니다. 중국어(PS: 물론 회사 서버에서는 이 문제를 고려할 필요가 없습니다. 프로그래머가 데이터베이스와 일치하도록 자체 글꼴을 설정하기 때문입니다.) 입력 방법을 설치한 이유는 세 가지를 사용해 보고 싶기 때문입니다. 같은 상황에서는 한자를 입력해도 글자가 깨져 나오는 일이 없습니다. 예전에는 가상머신에 있는 3가지(운영체제, 클라이언트, 데이터베이스) 문자가 일치하지 않을 경우 테스트 데이터베이스에서는 한자가 정상적으로 삽입되어 표시되는 경우가 많았는데 그렇지 않은 경우가 많았기 때문입니다. 그래서 제가 입력하는 문자도 UTF8이 되도록 하고 가상머신에서 중국어를 직접 입력할 수 있도록 리눅스에 중국어 입력기를 직접 설치했습니다.
1. 그런데 LINUX에서 중국어 입력기를 설치하는 단계도 여기에 나열되어 있으며, 이를 통해 향후 사용자 검색도 용이해집니다.
LINUX를 루트 사용자로 전환하고, 리눅스 설치 CD나 ISO 미러 파일을 로드합니다.
# Mount /DEV /CDROM /MNT // 설치해야 하는 중국어 입력기 설치 패키지
//필수 목록 나열 중국어 입력기 설치 패키지, scim으로 시작하는 모든 파일
중국어 입력기 설치 필수 설치 패키지는 다음과 같습니다. (다음 순서대로 설치해야 하며 설치 후 Linux를 다시 시작해야 합니다.) 2. scim-1.4. 4 -41.el5.x86_64.rpm | 64.rpm # RPM -IVH Scim-Libs-1.4.4-41.EL5.X86_64.rpm // 여기에는 첫 번째 패키지 방법만 나열되어 있습니다. 후자 5개 팩의 설치 방법은 Baidu와 동일합니다. Linux를 다시 시작해야 합니다.
2. 중국어 입력기 설치 후 루트 사용자로 전환하여 /etc/sysconfig/i18n 디렉토리로 들어가 리눅스 운영체제의 문자셋을 설정합니다.
$ echo $LANG (또는 입력: locale) //oracle 사용자에서 Linux 운영 체제의 문자 집합을 확인하세요
vim /etc/sysconfig/ i18n //i18n에서 Linux의 기본 문자 집합 수정
: LANG="en_US.UTF-8" en_US는 시스템 자체가 영어로 표시됨을 나타내며 중국어는 다음과 같습니다. zh_CN 시행하세요.
(PS: 실제로, 이 폴더를 수정할 때 문제가 발생했습니다. 즉, Linux에서 문자 집합 ZHS16GBK를 찾을 수 없습니다. Redhat5.6 x64 시스템을 사용하고 있으므로 LANG를 LANG="en_US로 설정하면 됩니다. ZHS16GBK"라고 입력한 후 소스 명령을 실행하면 오류가 보고되는데 이는 ZHS16GBK 문자 집합이 없다는 의미입니다. locale -a 명령을 사용하면 ZHS16GBK 문자 집합을 찾을 수 없습니다. 이것이 제가 UTF8을 문자 집합으로 선택한 이유입니다. 그런데 생각해보니 일반 회사의 서버에서는 클라이언트와 오라클 서버의 캐릭터 셋이 같으면 운영체제에 영향이 없을 것 같았습니다. 프로그래머는 개발 시 자신의 프로그램에 ZHS16GBK 인코딩을 지정할 수 있으므로 프로그램 + 클라이언트 + 오라클 서버의 문자 집합이 일관되게 유지됩니다. ZHS16GBK 문자 집합을 설치하는 방법을 알아보기 위해 계속 온라인을 찾고 있습니다.
3. 수정 후 oracle 사용자로 다시 전환한 다음 locale 또는 echo $LANG 명령을 사용하여 현재 작동을 확인합니다. 시스템 문자 집합을 보면 클라이언트와 데이터베이스 모두 UTF8과 일치함을 알 수 있습니다. 이때 Oracle 데이터베이스의 테스트 환경에 들어가면 테이블에 중국어를 삽입하고 수정한 후 쿼리하면 됩니다. 정상적으로 표시되며 더 이상 문자가 깨져서 표시되지 않습니다.
요약:
문자 집합 변환은 매우 복잡한 과정입니다. 위의 내용은 제가 직접 겪은 문제일 뿐이며, 좀 더 복잡한 문제를 발견한 후 천천히 추가하겠습니다. 하지만 전제는 3가지(운영체제)를 유지하는 것 이상입니다. , 운영 체제, 클라이언트, 데이터베이스 서버)는 동일한 문자 세트를 가지고 있습니다. 또한, 다른 문자 세트도 변환할 수 있지만 변환은 언제 잘못될지 모르기 때문에 위험할 것이므로 가장 안전합니다. 일관성을 유지하는 것이 최선이며, 테스트 환경이 아니라면 공식 프로덕션 라이브러리를 변경하지 않는 것이 가장 좋습니다. 따라서 데이터베이스를 생성할 때 어떤 문자 세트를 사용할지 생각해야 합니다.
예:
SYS@orcl>select * from test; -------------------------------- 99 우리는 모두 좋다 하위 123 광주화정보유한공사 SYS@orcl>테스트 값(3,'중국 광저우 백운구')에 삽입;1행 생성됨.SYS@orcl>commit;커밋 완료.SYS@orcl>select * 테스트에서 -------------------------------- ----- 99 우리는 모두 좋은 아이들입니다 123 중국 광저우 바이윈구 3호 광저우화정보유한회사, PHP 중국어 홈페이지를 주목해주세요!