


Penjelasan terperinci tentang peranan COLLATE dalam MYSQL dan perbezaan antara pelbagai COLLATE
Apakah itu COLLATE dalam MYSQL?
Laksanakan arahan cipta jadual
CREATE TABLE `table1` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `field1` text COLLATE utf8_unicode_ci NOT NULL COMMENT '字段1', `field2` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '字段2', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8_unicode_ci;
Kami mempunyai kebanyakan bidang yang saya boleh fahami, tetapi apa yang saya ingin bincangkan hari ini ialah kata kunci COLLATE. Apakah maksud utf8_unicode_ci yang sepadan di sebalik nilai ini? Jika anda menggunakan soalan ini untuk mengambil peperiksaan DBA semasa temu duga, soalan itu sepatutnya boleh membingungkan kebanyakan orang.
Untuk apa COLLATE digunakan?
Pembangunan menggunakan phpmyadmin mungkin kelihatan sangat biasa, kerana pengepala Cina telah memberikan jawapan:
tangkapan skrin phpmyadmin
Apa yang dipanggil utf8_unicode_ci sebenarnya adalah peraturan yang digunakan untuk mengisih. Untuk lajur jenis aksara dalam mysql, seperti lajur jenis VARCHAR, CHAR dan TEXT, jenis COLLATE diperlukan untuk memberitahu mysql cara mengisih dan membandingkan lajur. Ringkasnya, COLLATE akan menjejaskan susunan penyata ORDER BY, hasil yang ditapis oleh tanda yang lebih besar daripada atau kurang dalam keadaan WHERE, dan **DISTINCT**, **GROUP BY** dan **HAVING* * keputusan pertanyaan. Di samping itu, apabila MySQL membina indeks, jika lajur indeks adalah jenis aksara, ia juga akan menjejaskan penciptaan indeks, tetapi kita tidak dapat melihat kesan ini. Pendek kata, di mana sahaja perbandingan atau pengisihan jenis aksara terlibat, ia akan dikaitkan dengan COLLATE.
Perbezaan antara pelbagai COLLATE
COLLATE biasanya berkaitan dengan pengekodan data (CHARSET Secara umumnya, setiap CHARSET mempunyai berbilang COLLATE yang disokong dan setiap CHARSET). COLLATE sebagai nilai lalai. Sebagai contoh, COLLATE lalai untuk pengekodan Latin1 ialah latin1_swedish_ci, COLLATE lalai untuk pengekodan GBK ialah gbk_chinese_ci dan nilai lalai untuk pengekodan utf8mb4 ialah utf8mb4_general_ci.
Sebagai nota sampingan, terdapat dua pengekodan dalam mysql: utf8 dan utf8mb4 Dalam mysql, sila lupakan **utf8** dan sentiasa gunakan **utf8mb4**. Ini adalah isu lama MySQL UTF8 dalam MySQL hanya boleh menyokong pengekodan aksara dengan panjang maksimum 3 bait Untuk beberapa teks yang perlu menduduki 4 bait, UTF8 MySQL tidak menyokongnya.
Banyak COLLATE mempunyai perkataan _ci, yang merupakan singkatan daripada Case Insensitive, yang bermaksud bahawa "A" dan "a" dilayan sama rata apabila mengisih dan membandingkan. selection * dari table1 di mana field1="a" juga boleh memilih nilai field1 sebagai "A". Pada masa yang sama, bagi mereka COLLATE dengan akhiran _cs, ia adalah Sensitif Huruf, iaitu sensitif huruf besar.
Gunakan arahan show collation dalam mysql untuk melihat semua COLLATE yang disokong oleh mysql. Mengambil utf8mb4 sebagai contoh, semua COLLATE yang disokong oleh pengekodan ini adalah seperti yang ditunjukkan dalam rajah di bawah.
Semua COLLATE yang berkaitan dengan utf8mb4 dalam mysql
Dalam gambar kita dapat melihat peraturan penyusunan bahasa di banyak negara. Tiga yang biasa digunakan di China ialah utf8mb4_general_ci (lalai), utf8mb4_unicode_ci dan utf8mb4_bin. Mari kita terokai perbezaan antara ketiga-tiga ini:
Pertama sekali, kaedah perbandingan utf8mb4_bin adalah untuk merawat secara langsung semua aksara sebagai rentetan binari, dan kemudian membandingkannya daripada bit tertinggi kepada bit terendah. Jadi jelas ia sensitif huruf besar.
Sebenarnya tiada perbezaan antara utf8mb4_unicode_ci dan utf8mb4_general_ci untuk bahasa Cina dan Inggeris. Untuk sistem yang kami bangunkan untuk kegunaan domestik, anda boleh memilih mana-mana satu. Cuma untuk huruf di beberapa negara Barat, utf8mb4_unicode_ci lebih sesuai dengan tabiat bahasa mereka daripada utf8mb4_general_ci ialah standard MySQL yang lebih lama. Sebagai contoh, huruf Jerman "ß" adalah bersamaan dengan dua huruf "ss" dalam utf8mb4_unicode_ci (ini selaras dengan tabiat Jerman), tetapi dalam utf8mb4_general_ci, ia bersamaan dengan huruf "s". Walau bagaimanapun, perbezaan halus antara kedua-dua pengekodan adalah sukar untuk dilihat untuk perkembangan normal. Kami jarang menggunakan medan teks untuk mengisih secara langsung Untuk mengambil langkah ke belakang, walaupun satu atau dua huruf tidak sejajar, bolehkah ia benar-benar membawa akibat bencana kepada sistem? Berdasarkan pelbagai siaran dan perbincangan yang terdapat di Internet, lebih ramai orang mengesyorkan menggunakan utf8mb4_unicode_ci, tetapi mereka tidak begitu tahan terhadap sistem yang menggunakan nilai lalai, dan tidak fikir terdapat sebarang masalah besar. Kesimpulan: Adalah disyorkan untuk menggunakan utf8mb4_unicode_ci Untuk sistem yang sudah menggunakan utf8mb4_general_ci, tidak perlu menghabiskan masa untuk mengubah suai.
Perkara lain yang perlu diambil perhatian ialah bermula dari mysql 8.0, CHARSET lalai mysql bukan lagi Latin1, tetapi telah ditukar kepada utf8mb4 (pautan rujukan), dan COLLATE lalai juga telah ditukar kepada utf8mb4_0900_ai_ci. utf8mb4_0900_ai_ci secara amnya ialah subbahagian lanjut bagi unicode 0900 merujuk kepada bilangan algoritma perbandingan unikod (versi Algoritma Pengumpulan Unikod), dan ai bermaksud aksen tidak sensitif (sebutan tidak relevan Contohnya, e, è, é, ê dan ë dilayan sama rata. Pautan rujukan berkaitan 1, pautan rujukan berkaitan 2
KOLLAT tahap tetapan dan keutamaannya
设置COLLATE可以在示例级别、库级别、表级别、列级别、以及SQL指定。实例级别的COLLATE设置就是mysql配置文件或启动指令中的collation_connection系统变量。
库级别设置COLLATE的语句如下:
CREATE DATABASE <db_name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
如果库级别没有设置CHARSET和COLLATE,则库级别默认的CHARSET和COLLATE使用实例级别的设置。在mysql8.0以下版本中,你如果什么都不修改,默认的CHARSET是Latin1,默认的COLLATE是latin1_swedish_ci。从mysql8.0开始,默认的CHARSET已经改为了utf8mb4,默认的COLLATE改为了utf8mb4_0900_ai_ci。
表级别的COLLATE设置,则是在CREATE TABLE的时候加上相关设置语句,例如:
CREATE TABLE ( …… ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
如果表级别没有设置CHARSET和COLLATE,则表级别会继承库级别的CHARSET与COLLATE。
列级别的设置,则在CREATE TABLE中声明列的时候指定,例如
CREATE TABLE ( `field1` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', …… ) ……
如果列级别没有设置CHARSET和COLATE,则列级别会继承表级别的CHARSET与COLLATE。
最后,你也可以在写SQL查询的时候显示声明COLLATE来覆盖任何库表列的COLLATE设置,不太常用,了解即可:
SELECT DISTINCT field1 COLLATE utf8mb4_general_ci FROM table1; SELECT field1, field2 FROM table1 ORDER BY field1 COLLATE utf8mb4_unicode_ci;
如果全都显示设置了,那么优先级顺序是 SQL语句 > 列级别设置 > 表级别设置 > 库级别设置 > 实例级别设置。也就是说列上所指定的COLLATE可以覆盖表上指定的COLLATE,表上指定的COLLATE可以覆盖库级别的COLLATE。如果没有指定,则继承下一级的设置。即列上面没有指定COLLATE,则该列的COLLATE和表上设置的一样。
以上就是关于mysql的COLLATE相关知识。不过,在系统设计中,我们还是要尽量避免让系统严重依赖中文字段的排序结果,在mysql的查询中也应该尽量避免使用中文做查询条件。
推荐学习:《mysql视频教程》
Atas ialah kandungan terperinci Penjelasan terperinci tentang peranan COLLATE dalam MYSQL dan perbezaan antara pelbagai COLLATE. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Anda boleh membuka phpmyadmin melalui langkah -langkah berikut: 1. Log masuk ke panel kawalan laman web; 2. Cari dan klik ikon phpmyadmin; 3. Masukkan kelayakan MySQL; 4. Klik "Login".

MySQL adalah sistem pengurusan pangkalan data relasi sumber terbuka, terutamanya digunakan untuk menyimpan dan mengambil data dengan cepat dan boleh dipercayai. Prinsip kerjanya termasuk permintaan pelanggan, resolusi pertanyaan, pelaksanaan pertanyaan dan hasil pulangan. Contoh penggunaan termasuk membuat jadual, memasukkan dan menanyakan data, dan ciri -ciri canggih seperti Operasi Join. Kesalahan umum melibatkan sintaks SQL, jenis data, dan keizinan, dan cadangan pengoptimuman termasuk penggunaan indeks, pertanyaan yang dioptimumkan, dan pembahagian jadual.

Redis menggunakan satu seni bina berulir untuk memberikan prestasi tinggi, kesederhanaan, dan konsistensi. Ia menggunakan I/O multiplexing, gelung acara, I/O yang tidak menyekat, dan memori bersama untuk meningkatkan keserasian, tetapi dengan batasan batasan konkurensi, satu titik kegagalan, dan tidak sesuai untuk beban kerja yang berintensifkan.

Kedudukan MySQL dalam pangkalan data dan pengaturcaraan sangat penting. Ia adalah sistem pengurusan pangkalan data sumber terbuka yang digunakan secara meluas dalam pelbagai senario aplikasi. 1) MySQL menyediakan fungsi penyimpanan data, organisasi dan pengambilan data yang cekap, sistem sokongan web, mudah alih dan perusahaan. 2) Ia menggunakan seni bina pelanggan-pelayan, menyokong pelbagai enjin penyimpanan dan pengoptimuman indeks. 3) Penggunaan asas termasuk membuat jadual dan memasukkan data, dan penggunaan lanjutan melibatkan pelbagai meja dan pertanyaan kompleks. 4) Soalan -soalan yang sering ditanya seperti kesilapan sintaks SQL dan isu -isu prestasi boleh disahpepijat melalui arahan jelas dan log pertanyaan perlahan. 5) Kaedah pengoptimuman prestasi termasuk penggunaan indeks rasional, pertanyaan yang dioptimumkan dan penggunaan cache. Amalan terbaik termasuk menggunakan urus niaga dan preparedStatemen

MySQL dipilih untuk prestasi, kebolehpercayaan, kemudahan penggunaan, dan sokongan komuniti. 1.MYSQL Menyediakan fungsi penyimpanan dan pengambilan data yang cekap, menyokong pelbagai jenis data dan operasi pertanyaan lanjutan. 2. Mengamalkan seni bina pelanggan-pelayan dan enjin penyimpanan berganda untuk menyokong urus niaga dan pengoptimuman pertanyaan. 3. Mudah digunakan, menyokong pelbagai sistem operasi dan bahasa pengaturcaraan. 4. Mempunyai sokongan komuniti yang kuat dan menyediakan sumber dan penyelesaian yang kaya.

Apache menyambung ke pangkalan data memerlukan langkah -langkah berikut: Pasang pemacu pangkalan data. Konfigurasikan fail web.xml untuk membuat kolam sambungan. Buat sumber data JDBC dan tentukan tetapan sambungan. Gunakan API JDBC untuk mengakses pangkalan data dari kod Java, termasuk mendapatkan sambungan, membuat kenyataan, parameter mengikat, melaksanakan pertanyaan atau kemas kini, dan hasil pemprosesan.

Pemantauan yang berkesan terhadap pangkalan data REDIS adalah penting untuk mengekalkan prestasi yang optimum, mengenal pasti kemungkinan kesesakan, dan memastikan kebolehpercayaan sistem keseluruhan. Perkhidmatan Pengeksport Redis adalah utiliti yang kuat yang direka untuk memantau pangkalan data REDIS menggunakan Prometheus. Tutorial ini akan membimbing anda melalui persediaan lengkap dan konfigurasi perkhidmatan pengeksport REDIS, memastikan anda membina penyelesaian pemantauan dengan lancar. Dengan mengkaji tutorial ini, anda akan mencapai tetapan pemantauan operasi sepenuhnya

Proses memulakan MySQL di Docker terdiri daripada langkah -langkah berikut: Tarik imej MySQL untuk membuat dan memulakan bekas, tetapkan kata laluan pengguna root, dan memetakan sambungan pengesahan port Buat pangkalan data dan pengguna memberikan semua kebenaran ke pangkalan data
