Rumah > Artikel > pangkalan data > Mengapakah rentetan Cyrillic saya muncul sebagai \"????????\" dalam pangkalan data MySQL saya walaupun menetapkan `characterEncoding=utf-8` dalam sambungan JDBC saya?
Cara Mengekodkan Rentetan UTF-8 dengan Betul untuk MySQL Menggunakan JDBC
Pengenalan
Bila bekerja dengan MySQL melalui JDBC, adalah penting untuk memahami cara mengekod rentetan UTF-8 dengan betul untuk memastikan integriti data dan mengelakkan rasuah aksara. Artikel ini menangani isu biasa pengekodan UTF-8 yang salah, yang membawa kepada teks bercelaru dalam MySQL.
Pernyataan Masalah
Baris yang dimasukkan ke dalam jadual MySQL menggunakan JDBC telah dipaparkan dengan aksara yang salah, menunjukkan "????????" bukannya teks Cyrillic yang dimaksudkan. Masalah ini berterusan walaupun menetapkan "characterEncoding=utf-8" dalam rentetan sambungan dan melaksanakan pernyataan SQL untuk menetapkan set aksara.
Konfigurasi MySQL
Untuk menyelesaikan isu , adalah penting untuk mengesahkan tetapan konfigurasi MySQL. Jalankan arahan berikut untuk menyemak pengekodan aksara dan tetapan penyusunan:
show variables like 'character%'; show variables like 'collation%';
Konfigurasi Sambungan JDBC
Pastikan rentetan sambungan JDBC termasuk pengekodan aksara dan Unicode yang betul tetapan:
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDatabase?useUnicode=true&characterEncoding=UTF-8","user","passwd");
Pernyataan SQL untuk Pengurusan Set Aksara
Secara amnya tidak perlu melaksanakan pernyataan SQL untuk menetapkan set aksara dan pengekodan secara eksplisit. Secara lalai, MySQL menggunakan tetapan yang dikonfigurasikan melalui my.cnf atau my.ini. Walau bagaimanapun, dalam beberapa kes, anda mungkin perlu melaksanakan pernyataan berikut:
<code class="sql">SET NAMES 'utf8'; SET CHARACTER SET 'utf8';</code>
Definisi Jadual Pangkalan Data
Pastikan jadual pangkalan data ditakrifkan dengan aksara yang betul set dan pengekodan:
<code class="sql">CREATE TABLE clt ( id bigint NOT NULL, text varchar(50) NOT NULL ) DEFAULT CHARACTER SET utf8;</code>
Melucutkan Pernyataan SQL yang Tidak Diperlukan
Kod contoh yang diberikan tidak perlu melaksanakan pernyataan SQL untuk menetapkan set aksara. Mengalih keluar pernyataan berikut menyelesaikan isu:
<code class="sql">query = "set character set utf8"; stat.execute(query);</code>
Konfigurasi Sisi Pangkalan Data
Sebagai langkah terakhir, sahkan bahawa konfigurasi sisi pangkalan data sepadan dengan JDBC dan kod tetapan. Ini termasuk mengubah suai my.cnf atau my.ini untuk menetapkan set aksara-pelayan dan parameter sistem fail set aksara yang sesuai.
Dengan mengikuti garis panduan ini, anda boleh memastikan pengendalian rentetan UTF-8 yang tepat dalam MySQL anda pangkalan data melalui JDBC, menghalang teks bercelaru dan mengekalkan integriti data.
Atas ialah kandungan terperinci Mengapakah rentetan Cyrillic saya muncul sebagai \"????????\" dalam pangkalan data MySQL saya walaupun menetapkan `characterEncoding=utf-8` dalam sambungan JDBC saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!