Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Menganalisis dan menyelesaikan masalah kod mysql bercelaru dalam docker

Menganalisis dan menyelesaikan masalah kod mysql bercelaru dalam docker

PHPz
PHPzasal
2023-04-25 09:19:201492semak imbas

Docker ialah platform kontena popular yang menjadikan penggunaan dan pengurusan aplikasi lebih mudah dan cekap. Pangkalan data MySQL adalah sebahagian daripada banyak aplikasi. Walau bagaimanapun, apabila menggunakan MySQL dalam Docker, anda kadangkala menghadapi aksara yang bercelaru, yang bukan sahaja menjejaskan ketepatan data, tetapi juga membawa masalah yang tidak perlu kepada pembangun.

Artikel ini akan memperkenalkan masalah rumit MySQL dalam Docker dan kemungkinan penyelesaian.

1. Masalah kod bercelaru MySQL dalam Docker

Kod bercelaru bermakna data yang ditanya pada klien tidak memenuhi jangkaan dan terdapat beberapa aksara atau gelagat yang tidak dapat dikenali.

Masalah ini sangat biasa apabila menjalankan MySQL dalam Docker. Terutama apabila kaedah pengekodan pangkalan data MySQL ditetapkan kepada UTF-8, situasi berikut mungkin berlaku:

1 Apabila memasukkan data, aksara Cina atau bahasa lain yang biasa bagi data menjadi beberapa aksara rawak.

2. Apabila pelanggan menanyakan data, data yang dikembalikan mengandungi sejumlah besar aksara yang bercelaru.

Sebenarnya, masalah ini bukan disebabkan oleh Docker atau MySQL sendiri, tetapi disebabkan beberapa tetapan dan konfigurasi yang salah.

2. Penyelesaian kepada MySQL dalam Docker

1. Semak set aksara sumber data

Punca aksara bercelaru adalah kerana set aksara pangkalan data tidak konsisten dengan set aksara sumber data. Kami perlu mengesahkan sama ada set aksara sumber data ialah UTF-8 untuk memastikan ketepatan penghantaran data antara sistem yang berbeza.

Semak set aksara lalai MySQL dalam MySQL melalui arahan berikut:

show variables like 'character%';

set_pelanggan_karakter, set_karakter_sambungan dan set_huruf_hasil dalam hasil yang dipaparkan mestilah utf8mb4. Jika tidak, ia boleh menyebabkan masalah soalan.

Untuk menjalankan MySQL dalam Docker, anda perlu menambah parameter berikut pada fail konfigurasi Dockerfile atau Docker-compose:

...
environment:
  MYSQL_ROOT_PASSWORD: root
  MYSQL_DATABASE: test
  MYSQL_USER: test
  MYSQL_PASSWORD: test
  MYSQL_CHARSET: utf8mb4
  MYSQL_COLLATION: utf8mb4_unicode_ci
...

Antaranya, MYSQL_CHARSET dan MYSQL_COLLATION ialah set aksara dan pengisihan kaedah masing-masing.

2. Ubah suai fail konfigurasi MySQL

Apabila menjalankan MySQL dalam Docker, anda juga boleh mengubah suai fail konfigurasi MySQL untuk mencapai set aksara dan kaedah pengisihan yang betul.

Masukkan fail konfigurasi MySQL my.cnf dan tambahkan konfigurasi berikut di bahagian bawah:

[mysql]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
skip-character-set-client-handshake

Untuk menjalankan MySQL dalam Docker, anda perlu menyalin my.cnf ke bekas terlebih dahulu:

...
volumes:
  - ./my.cnf:/etc/mysql/conf.d/my.cnf
...

3. Semak set aksara klien MySQL

Apabila menjalankan MySQL dalam Docker, anda perlu memastikan set aksara klien (seperti sistem pengendalian dan alatan klien MySQL , dsb.) juga merupakan UTF-8.

Di Linux, anda boleh melihat set aksara sistem semasa melalui arahan berikut:

$ echo $LANG

Jika LANG mengembalikan set aksara lain, anda perlu menambah persekitaran LANG pada shell anda fail konfigurasi Pembolehubah:

$ echo "export LANG='en_US.utf8'" >> ~/.bashrc

Dalam sistem Windows, anda perlu memastikan set aksara alat klien (seperti Navicat, dll.) juga adalah UTF-8.

4. Tetapkan atribut lajur MySQL

Dalam MySQL, set aksara dan peraturan penyusunan dalam atribut lajur juga akan mempengaruhi ketepatan hasil pertanyaan. Secara lalai, sifat lajur jadual MySQL baharu menggunakan tetapan lalai pelayan MySQL. Jika set aksara dan pengumpulan pelayan MySQL tidak sepadan, aksara bercelaru mungkin terhasil.

Untuk menyelesaikan masalah ini, anda boleh menetapkan atribut lajur secara manual kepada:

CREATE TABLE test (
  name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
...
);

Apabila mencipta jadual, perkara di atas adalah beberapa penyelesaian kepada masalah MySQL yang bercelaru dalam Docker. Pembangun boleh memilih kaedah yang sesuai dengan mereka mengikut keperluan dan keadaan sebenar mereka sendiri. Dalam persekitaran pengeluaran, untuk memastikan kestabilan dan kebolehpercayaan sistem, penggunaan dan konfigurasi aplikasi perlu diuji dan disahkan dengan teliti.

Atas ialah kandungan terperinci Menganalisis dan menyelesaikan masalah kod mysql bercelaru dalam docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn