Pengekodan UTF-8 kini merupakan format pengekodan aksara yang paling banyak digunakan, dan MySQL juga boleh menyokong penggunaan pengekodan UTF-8 untuk menyimpan data. Walau bagaimanapun, apabila menggunakan MySQL untuk menyimpan data yang dikodkan UTF-8, aksara bercelaru mungkin berlaku. Artikel ini akan memperkenalkan sebab dan penyelesaian untuk menghadapi pengekodan UTF-8 aksara bercelaru dalam MySQL.
Atas sebab sejarah, MySQL menggunakan format pengekodan Latin1 (ISO-8859-1) secara lalai. Format pengekodan ini sesuai untuk kebanyakan bahasa Barat. Tetapi untuk bahasa seperti bahasa Asia dan bahasa Timur Tengah yang menggunakan set aksara yang kompleks, nampaknya tidak mencukupi.
Dengan perkembangan teknologi Internet, semakin banyak negara dan wilayah menggunakan set aksara bukan abjad Latin untuk komunikasi teks. Untuk menyelesaikan masalah ini, MySQL memperkenalkan format pengekodan UTF-8 untuk membolehkan MySQL menyimpan teks bahasa yang lebih kaya. Pengekodan UTF-8 (Format Transformasi Unikod 8-bit) ialah pengekodan aksara panjang boleh ubah yang menyokong semua aksara dalam piawai Unikod Walau bagaimanapun, apabila pengekodan UTF-8 disimpan dalam MySQL, aksara bercelaru mungkin berlaku.
Punca dan penyelesaian untuk aksara bercelaru:
Masalah 1: CHARSET jadual MySQL tidak dalam format UTF-8.
Apabila mencipta jadual, jika CHARSET tidak dinyatakan, CHARSET pangkalan data akan digunakan secara lalai. Oleh itu, apabila CHARSET pangkalan data bukan UTF-8, data yang disimpan dalam pengekodan UTF-8 akan bercelaru.
1.1 Semak CHARSET pangkalan data
Mula-mula anda perlu menyemak CHARSET pangkalan data Anda boleh menyemak CHARSET pangkalan data semasa melalui arahan berikut:
mysql> show create database databaseName;
1.2. Ubah suai CHARSET pangkalan data
Jika CHARSET pangkalan data bukan UTF-8, anda perlu mengubah suai CHARSET pangkalan data. Anda boleh mengubah suai CHARSET pangkalan data melalui langkah berikut:
1.2.1 Sandarkan pangkalan data
Oleh kerana kita perlu mengubah suai CHARSET pangkalan data, kita perlu membuat sandaran pangkalan data pertama.
1.2.2 Ubah suai pengekodan lalai pangkalan data
Dalam MySQL, anda boleh menentukan pengekodan lalai semasa mencipta pangkalan data Pengekodan lalai biasanya ditetapkan kepada UTF-8 demonstrasi cara mengubah suai pengekodan lalai.
Ubah suai fail konfigurasi MySQL /etc/mysql/mysql.conf.d/mysqld.conf, cari "[mysqld]", dan tambah kandungan berikut:
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci
Selepas pengubahsuaian dibuat selesai, simpan dan berhenti.
1.2.3 Ubah suai pangkalan data dan pengekodan jadual
Dalam MySQL, anda boleh melihat pengekodan pangkalan data, jadual dan lajur melalui pernyataan SQL berikut:
/*查看数据库使用的编码*/ SHOW VARIABLES LIKE 'character_set_database'; /*查看数据表使用的编码*/ SHOW FULL COLUMNS FROM 表名; /*查看列使用的编码*/ SELECT column_name, character_set_name FROM information_schema.columns WHERE table_name='表名';
Jika semasa pengekodan tidak wujud Jika anda menggunakan UTF-8, anda perlu mengubah suai pengekodan pangkalan data, jadual dan lajur kepada UTF-8 Anda boleh mengubah suainya melalui pernyataan SQL berikut:
/*修改数据库编码为 utf8mb4 */ ALTER DATABASE databaseName CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; /*修改表编码为 utf8mb4*/ ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; /*修改列编码为 utf8mb4*/ ALTER TABLE 表名 MODIFY COLUMN 列名 varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Selepas pengubahsuaian. selesai, laksanakan perkara di atas untuk melihat kaedah pengekodan semula dan sahkan CHARSET Dikodkan sebagai UTF-8.
Masalah 2: Pengekodan UTF-8 tidak ditetapkan untuk sambungan pangkalan data
Apabila aplikasi bersambung ke pangkalan data MySQL, anda perlu menentukan set aksara sambungan Jika pengekodan UTF-8 tidak ditetapkan, UTF akan dibaca dan ditulis aksara bercelaru akan muncul apabila mengekod data dengan -8. Apabila menyambung ke pangkalan data MySQL, anda boleh menetapkan pengekodan UTF-8 melalui pernyataan berikut:
SET NAMES utf8mb4;
Soalan 3: Pelanggan MySQL memaparkan masalah pengekodan
Apabila melaksanakan pernyataan SQL menggunakan baris arahan, ia mungkin aksara bercelaru berlaku terutamanya kerana pelanggan memaparkan aksara bercelaru. Masalah ini boleh diselesaikan dengan menetapkan format pengekodan klien MySQL.
Klien Linux/MacOSX 3.1 menyelesaikan aksara bercelaru
Dalam sistem Linux dan MacOSX, anda boleh menetapkan format pengekodan klien MySQL melalui arahan berikut:
export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8
Selepas tetapan dibuat selesai, anda boleh Menjalankan klien MySQL, melaksanakan pernyataan SQL, dan memaparkan aksara Cina secara normal.
3.2 Pelanggan Windows menyelesaikan aksara bercelaru
Dalam sistem Windows, anda boleh menetapkan format pengekodan klien MySQL melalui langkah berikut:
Buka Panel Kawalan-> - > Sistem-> Tetapan sistem lanjutan-> klien dan laksanakan pernyataan SQL Paparkan aksara Cina secara normal.
Ringkasan:
Apabila menyimpan data berkod UTF-8 dalam MySQL, aksara bercelaru mungkin berlaku. Sebab utama masalah kod bercelaru ialah CHARSET jadual tidak dalam format pengekodan UTF-8, sambungan pangkalan data tidak ditetapkan kepada pengekodan UTF-8, dan klien MySQL memaparkan isu pengekodan. Dengan mengkonfigurasi CHARSET, set aksara sambungan dan format pengekodan klien dengan betul dalam MySQL, masalah pengekodan UTF-8 aksara bercelaru boleh diselesaikan.
Atas ialah kandungan terperinci utf8 mysql kod kacau. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!