Heim >Datenbank >MySQL-Tutorial >Was ist der Unterschied zwischen utf8_unicode_ci und utf8_general_ci in MySQL?

Was ist der Unterschied zwischen utf8_unicode_ci und utf8_general_ci in MySQL?

不言
不言nach vorne
2019-03-27 10:04:093764Durchsuche

Der Inhalt dieses Artikels befasst sich mit dem Unterschied zwischen utf8_unicode_ci und utf8_general_ci in MySQL? Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Was ist der Unterschied zwischen utf8_general_ci und utf8_unicode_ci in MySQL? In Programmiersprachen wird Unicode normalerweise zur Verarbeitung chinesischer Zeichen verwendet, um verstümmelte Zeichen zu verhindern. Warum verwenden dann in MySQL alle utf8_general_ci anstelle von utf8_unicode_ci?

Nachdem ich es so lange verwendet hatte, stellte ich fest, dass ich nicht einmal den Unterschied zwischen utf_bin und utf_general_ci kannte. .
ci unterscheidet nicht zwischen Groß- und Kleinschreibung, d. h. a und A werden bei der Zeichenbeurteilung gleich behandelt.
bin ist binär, a und A werden unterschiedlich behandelt. Wenn Sie Folgendes ausführen:
SELECT * FROM table WHERE txt = 'a'
Dann finden Sie die Zeile mit txt = 'A' nicht in utf8_bin, utf8_general_ci jedoch schon.
utf8_general_ci unterscheidet nicht zwischen Groß- und Kleinschreibung. Diesen verwenden Sie bei der Registrierung Ihres Benutzernamens und Ihrer E-Mail-Adresse.
utf8_general_cs unterscheidet zwischen Groß- und Kleinschreibung.
utf8_bin: string Jeder String wird mit Binärdaten kompiliert und gespeichert. Es unterscheidet zwischen Groß- und Kleinschreibung und kann binäre Inhalte speichern

1. Offizielle Dokumentbeschreibung
Das Folgende ist ein Auszug aus dem chinesischen Handbuch von MySQL 5.1 zu utf8_unicode_ci und utf8_general_ci:

Derzeit unterstützt die Sortierungsregel utf8_unicode_ci den Unicode-Sortierungsregelalgorithmus nur teilweise. Einige Zeichen werden immer noch nicht unterstützt. Außerdem werden kombinierte Token nicht vollständig unterstützt. Dies betrifft vor allem einige Minderheitensprachen in Vietnam und Russland, wie zum Beispiel: Udmurtisch, Tatarisch, Baschkirisch und Mari.

Das Hauptmerkmal von utf8_unicode_ci ist die Unterstützung der Erweiterung, d. h. wenn ein Buchstabe als gleichwertig mit anderen Buchstabenkombinationen betrachtet wird. Beispielsweise ist „ß“ im Deutschen und einigen anderen Sprachen gleichbedeutend mit „ss“.

utf8_general_ci ist eine veraltete Sortierregel und unterstützt keine Erweiterungen. Es sind nur zeichenweise Vergleiche möglich. Dies bedeutet, dass mit der Sortierung utf8_general_ci durchgeführte Vergleiche schnell, aber weniger genau sind als Vergleiche mit der Sortierung utf8_unicode_ci.

Bei Verwendung der beiden Sortierregeln utf8_general_ci und utf8_unicode_ci sind die folgenden Vergleiche gleich:

Ä = A
Ö = O
Ü = U

Einer von Die beiden Sortierregeln Der Unterschied besteht darin, dass für utf8_general_ci die folgende Gleichung gilt:

ß = s

Für utf8_unicode_ci gilt jedoch die folgende Gleichung:

ß = ss

für a Sprache Sprachspezifische Sortierregeln für utf8-Zeichensätze werden nur erzwungen, wenn die Sortierung mit utf8_unicode_ci nicht gut funktioniert. Für Deutsch und Französisch funktioniert beispielsweise utf8_unicode_ci einwandfrei, sodass keine speziellen utf8-Sortierungsregeln für diese beiden Sprachen erstellt werden müssen.

utf8_general_ci funktioniert auch mit Deutsch und Französisch, außer dass „ß“ gleich „s“ und nicht „ss“ ist. Wenn Ihre Anwendung dies akzeptieren kann, sollten Sie utf8_general_ci verwenden, da es schnell ist. Andernfalls verwenden Sie utf8_unicode_ci, da es genauer ist.

Wenn Sie die gb2312-Codierung verwenden möchten, wird empfohlen, latin1 als Standardzeichensatz der Datentabelle zu verwenden, damit Sie Daten direkt auf Chinesisch in das Befehlszeilentool einfügen und direkt anzeigen können. Verwenden Sie nicht gb2312 oder Zeichensätze wie gbk. Wenn Sie sich Sorgen über die Abfragesortierung und andere Probleme machen, können Sie binäre Attributbeschränkungen verwenden, wie zum Beispiel:

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

2. Kurze Zusammenfassung
utf8_unicode_ci und utf8_general_ci für Chinesisch und Englisch Es gibt keinen wirklichen Unterschied.
utf8_general_ci ist beim Korrekturlesen schnell, aber etwas ungenauer.
utf8_unicode_ci hat eine hohe Genauigkeit, aber die Proofing-Geschwindigkeit ist etwas langsamer.

Wenn Ihre Bewerbung auf Deutsch, Französisch oder Russisch ist, verwenden Sie bitte unbedingt utf8_unicode_ci. Im Allgemeinen reicht es aus, utf8_general_ci zu verwenden, und bisher wurde kein Problem festgestellt. . .

3. Detaillierte Zusammenfassung

1. Für eine Sprache gilt: Nur wenn die utf8_unicode_ci-Sortierung nicht richtig durchgeführt wurde, erfolgt das Korrekturlesen des utf8-Zeichensatzes für die jeweilige Sprache Regel durchgeführt. Für Deutsch und Französisch funktioniert beispielsweise utf8_unicode_ci einwandfrei, sodass keine speziellen utf8-Sortierungsregeln für diese beiden Sprachen erstellt werden müssen.

2. utf8_general_ci gilt auch für Deutsch und Französisch, außer dass „?“ gleich „s“ anstelle von „ss“ ist. Wenn Ihre Anwendung dies akzeptieren kann, sollten Sie utf8_general_ci verwenden, da es schnell ist. Andernfalls verwenden Sie utf8_unicode_ci, da es genauer ist.

Verwenden Sie einen Satz, um den obigen Absatz zusammenzufassen: utf8_unicode_ci ist genauer und utf8_general_ci ist schneller. Unter normalen Umständen reicht die Genauigkeit von utf8_general_ci für unsere Verwendung aus. Nachdem ich viele Programmquellcodes gelesen hatte, stellte ich fest, dass die meisten von ihnen auch utf8_general_ci verwenden. Daher wird beim Erstellen einer neuen Datenbank im Allgemeinen utf8_general_ci verwendet

4. So verwenden Sie UTF8 in MySQL5.0
Fügen Sie die folgenden Parameter in my.cnf hinzu

[mysqld]
init_connect='SET NAMES utf8′
default-character-set=utf8
default-collation = utf8_general_ci

Abfrage mysql> > Persönliche Meinung: Für die Verwendung von Datenbanken ist utf8 – allgemein genau genug und hat im Vergleich zu utf8 – Unicode einen Geschwindigkeitsvorteil, sodass Sie es bedenkenlos verwenden können

附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视频教程栏目!

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen utf8_unicode_ci und utf8_general_ci in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen