>  기사  >  데이터 베이스  >  MySQL에서 utf8_unicode_ci와 utf8_general_ci의 차이점은 무엇입니까?

MySQL에서 utf8_unicode_ci와 utf8_general_ci의 차이점은 무엇입니까?

不言
不言앞으로
2019-03-27 10:04:093709검색

이 기사에서는 Mysql에서 utf8_unicode_ci와 utf8_general_ci의 차이점이 무엇인지 설명합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

Mysql에서 utf8_general_ci와 utf8_unicode_ci의 차이점은 무엇인가요? 프로그래밍 언어에서 유니코드는 일반적으로 문자 왜곡을 방지하기 위해 한자를 처리하는 데 사용됩니다. 그렇다면 MySQL에서는 왜 모든 사람이 utf8_unicode_ci 대신 utf8_general_ci를 사용합니까?

오랜 시간 사용해본 결과 utf_bin과 utf_general_ci의 차이점을 몰랐습니다. .
ci는 대소문자를 구분하지 않습니다. 즉, a와 A는 문자 판단에서 동일하게 처리됩니다.
bin은 이진수이고 a와 A는 다르게 처리됩니다.
예를 들어 다음을 실행하면: * FROM table WHERE txt = 'a'
그러면 utf8_bin에서 txt = 'A'인 행을 찾을 수 없지만 utf8_general_ci는 찾을 수 있습니다.
utf8_general_ci는 대소문자를 구분하지 않으므로 사용자 이름을 등록할 때 이를 사용해야 하며 이메일.
utf8_general_cs는 대소문자를 구분합니다. 이를 사용자 이름과 이메일에 사용하면 부정적인 결과가 발생합니다.
utf8_bin: 문자열. 대소문자를 구분하며 바이너리 내용을 저장할 수 있습니다

1. 공식 문서 설명
다음은 utf8_unicode_ci 및 utf8_general_ci에 대한 Mysql 5.1 중국어 매뉴얼에서 발췌한 내용입니다.

현재 utf8_unicode_ci 교정 규칙은 유니코드 교정을 부분적으로만 지원합니다. 규칙 알고리즘. 일부 문자는 아직 지원되지 않습니다. 또한 결합된 토큰은 완전히 지원되지 않습니다. 이는 주로 Udmurt, Tatar, Bashkir 및 Mari와 같은 베트남과 러시아의 일부 소수 언어에 영향을 미칩니다.

utf8_unicode_ci의 주요 기능은 확장, 즉 문자가 다른 문자 조합과 동일하다고 간주되는 경우를 지원하는 것입니다. 예를 들어 'ß'는 독일어 및 일부 다른 언어의 'ss'와 동일합니다.

utf8_general_ci는 레거시 대조 규칙이며 확장을 지원하지 않습니다. 문자별 비교만 가능합니다. 즉, utf8_general_ci 데이터 정렬을 사용한 비교는 빠르지만 utf8_unicode_ci 데이터 정렬을 사용한 비교보다 정확도가 떨어집니다.

예를 들어, 두 가지 정렬 규칙 utf8_general_ci 및 utf8_unicode_ci를 사용하면 다음 비교가 동일합니다.

ä = A
Ö = O
Ü = U

두 조합 규칙의 차이점은 utf8_general_ci의 경우 다음 방정식이 성립한다는 것입니다.

ß = s

그러나 utf8_unicode_ci의 경우 다음 방정식이 성립합니다.

ß = ss

언어의 경우 특정 언어와 관련된 utf8 문자 집합 대조 규칙은 utf8_unicode_ci를 사용한 정렬이 제대로 수행되지 않은 경우에만 구현됩니다. 예를 들어 독일어와 프랑스어의 경우 utf8_unicode_ci는 잘 작동하므로 이 두 언어에 대해 특별한 utf8 대조 규칙을 만들 필요가 없습니다.

utf8_general_ci는 'ß'가 'ss'가 아니라 's'와 같다는 점을 제외하면 독일어 및 프랑스어에서도 작동합니다. 애플리케이션이 이를 수용할 수 있다면 속도가 빠르기 때문에 utf8_general_ci를 사용해야 합니다. 그렇지 않으면 더 정확하므로 utf8_unicode_ci를 사용하십시오.

gb2312 인코딩을 사용하려면 데이터 테이블의 기본 문자 집합으로 latin1을 사용하는 것이 좋습니다. 그래야 중국어 명령줄 도구에 데이터를 직접 삽입하고 문자를 직접 표시할 수 있기 때문입니다. gb2312 또는 gbk와 같은 쿼리 정렬 및 기타 문제가 걱정된다면 다음과 같은 바이너리 속성 제약 조건을 사용할 수 있습니다.

create table my_table ( name varchar(20) binary not null default '')type=myisam default charset latin1;

2. 간략한 요약
utf8_unicode_ci 및 utf8_general_ci는 중국어와 영어 사이에 큰 차이가 없습니다. .
utf8_general_ci는 교정 속도가 빠르지만 정확도가 약간 떨어집니다.
utf8_unicode_ci는 정확도가 높지만 교정 속도가 약간 느립니다.

애플리케이션이 독일어, 프랑스어, 러시아어로 되어 있는 경우 반드시 utf8_unicode_ci를 사용하세요. 일반적으로는 utf8_general_ci를 사용하면 충분하며, 아직까지는 문제가 발견되지 않았습니다. . .

3. 상세 요약

1. 언어의 경우 utf8_unicode_ci 정렬이 제대로 이루어지지 않은 경우에만 해당 언어와 관련된 utf8 문자 집합 대조 규칙이 실행됩니다. 예를 들어 독일어와 프랑스어의 경우 utf8_unicode_ci는 잘 작동하므로 이 두 언어에 대해 특별한 utf8 대조 규칙을 만들 필요가 없습니다.

2. utf8_general_ci는 '?'가 'ss'가 아니라 's'와 같다는 점을 제외하면 독일어와 프랑스어에도 적용됩니다. 애플리케이션이 이를 수용할 수 있다면 속도가 빠르기 때문에 utf8_general_ci를 사용해야 합니다. 그렇지 않으면 더 정확하므로 utf8_unicode_ci를 사용하십시오.

위 단락을 요약하려면 한 문장을 사용하세요. utf8_unicode_ci가 더 정확하고 utf8_general_ci가 더 빠릅니다. 일반적인 상황에서는 utf8_general_ci의 정확성이면 충분합니다. 많은 프로그램 소스 코드를 읽은 후 대부분이 utf8_general_ci를 사용한다는 것을 알았으므로 새 데이터베이스를 만들 때 일반적으로 utf8_general_ci를 선택합니다. MySQL5.0

my.cnf

[mysqld]
init_connect='SET NAMES utf8′
default-character-set=utf8
default-collation = utf8_general_ci
다음과 같은 매개변수를 실행합니다. mysql> show Variables; 관련 내용:
character_set_client | utf8 
character_set_connection | utf8 
character_set_database | utf8 
character_set_results | utf8 
character_set_server | utf8 
character_set_system | utf8
collation_connection | utf8_general_ci 
collation_database | utf8_general_ci 
collation_server | utf8_general_ci
개인 의견, 데이터베이스 사용에 대한 utf8 - 일반은 충분히 정확하고 관련성이 있습니다. utf8-unicode로 속도면에서 장점이 있으니 안심하고 사용하셔도 됩니다

附1:旧数据升级办法

以原来的字符集为latin1为例,升级成为utf8的字符集。原来的表: old_table (default charset=latin1),新表:new_table(default charset=utf8)。

第一步:导出旧数据

mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table > old.sql

第二步:转换编码(类似unix/linux环境下)

iconv -t utf-8 -f gb2312 -c old.sql > new.sql

或者可以去掉 -f 参数,让iconv自动判断原来的字符集

iconv -t utf-8 -c old.sql > new.sql

在这里,假定原来的数据默认是gb2312编码。

第三步:导入

修改old.sql,在插入/更新语句开始之前,增加一条sql语句: "SET NAMES utf8;",保存。

mysql -hlocalhost -uroot my_db < new.sql

大功告成!!

附2:支持查看utf8字符集的MySQL客户端有
1.) MySQL-Front,据说这个项目已经被MySQL AB勒令停止了,不知为何,如果国内还有不少破解版可以下载(不代表我推荐使用破解版 :-P)。
2.) Navicat,另一款非常不错的MySQL客户端,汉化版刚出来,还邀请我试用过,总的来说还是不错的,不过也需要付费。
3.) PhpMyAdmin,开源的php项目,非常好。
4.) Linux下的终端工具(Linux terminal),把终端的字符集设置为utf8,连接到MySQL之后,执行 SET NAMES UTF8; 也能读写utf8数据了。

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的MySQL视频教程栏目!

위 내용은 MySQL에서 utf8_unicode_ci와 utf8_general_ci의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제