Saat ini kami menggunakan perintah berikut dalam PHP untuk mengatur set karakter ke UTF-8 di aplikasi kami.
Karena ini sedikit overhead, kami ingin menetapkan ini sebagai pengaturan default di MySQL. Bisakah kita melakukan ini di /etc/my.cnf atau di lokasi lain?
SET NAMES 'utf8'
SET CHARACTER SET utf8
Saya telah mencari charset default di /etc/my.cnf, tetapi tidak ada yang tentang charset di sana.
Pada titik ini, saya melakukan hal berikut untuk mengatur variabel charset dan collation MySQL ke UTF-8:
skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8
Apakah itu cara yang benar untuk menangani ini?
mysql
character-encoding
Jorre
sumber
sumber
utf8mb4
, yaitu UTF-8 nyata dengan dukungan Unicode penuh. Lihat Cara mendukung Unicode penuh dalam database MySQL .utf8mb4
jenis pengaturan preseden berbahaya saat ini duduk?Jawaban:
Untuk mengatur default ke UTF-8, Anda ingin menambahkan yang berikut ke my.cnf
Jika Anda ingin mengubah set karakter untuk DB yang ada, beri tahu saya ... pertanyaan Anda tidak menentukan secara langsung jadi saya tidak yakin apakah itu yang ingin Anda lakukan.
sumber
Table
CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;[mysqld]
.utf8
charset MySQL . Gunakanutf8mb4
sebagai gantinya.Untuk versi terbaru MySQL,
menyebabkan masalah. Sudah usang saya pikir.
Seperti yang dikatakan Justin Ball dalam " Tingkatkan ke MySQL 5.5.12 dan sekarang MySQL tidak akan mulai , Anda harus:
Hapus arahan itu dan Anda harus baik.
Maka file konfigurasi Anda ('/ etc / my.cnf' misalnya) akan terlihat seperti itu:
Mulai ulang MySQL.
Untuk memastikan, MySQL Anda adalah UTF-8, jalankan query berikut di prompt MySQL Anda:
Kueri pertama:
Outputnya akan terlihat seperti:
Kueri kedua:
Dan output permintaan adalah:
sumber
character_set_filesystem | utf8
. Saya tidak yakin, tidak apa-apa?mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
default-character-set
, sebaliknya Anda dapat mengubah keloose-default-character-set = utf8
- yaitu, awalan dengan 'longgar-'. Ini membuatmysqlbinlog
senang, jika Anda perlu menggunakannya - google untuk: "longgar-default-karakter-set" mysqlbinlog .init-connect='SET NAMES utf8'
benar-benar perlu? Jika tidak, kita pasti bisa melakukannya tanpa kinerja.Pertanyaan ini sudah memiliki banyak jawaban, tetapi Mathias Bynens menyebutkan bahwa 'utf8mb4' harus digunakan alih-alih 'utf8' agar mendapat dukungan UTF-8 yang lebih baik ('utf8' tidak mendukung karakter 4 byte, bidang terpotong saat disisipkan ). Saya menganggap ini sebagai perbedaan penting. Jadi di sini ada jawaban lain tentang cara mengatur set karakter standar dan pemeriksaan. Yang memungkinkan Anda untuk memasukkan tumpukan kotoran (💩).
Ini berfungsi pada MySQL 5.5.35.
Perhatikan, bahwa beberapa pengaturan mungkin opsional. Karena saya tidak sepenuhnya yakin bahwa saya belum melupakan apa pun, saya akan menjadikan ini sebagai wiki komunitas
Pengaturan Lama
Konfigurasi
Pengaturan Baru
character_set_system selalu utf8 .
Ini tidak akan mempengaruhi tabel yang ada, itu hanya pengaturan default (digunakan untuk tabel baru). Kode ALTER berikut dapat digunakan untuk mengonversi tabel yang ada (tanpa penyelesaian dump-restore):
Edit:
Pada server MySQL 5.0: character_set_client, character_set_connection, character_set_result, collation_connection tetap di latin1. Penerbitan
SET NAMES utf8
(utf8mb4 tidak tersedia dalam versi itu) mengatur mereka juga untuk utf8.Peringatan : Jika Anda memiliki tabel utf8 dengan kolom indeks tipe VARCHAR (255), dalam beberapa kasus tidak dapat dikonversi, karena panjang kunci maksimum terlampaui (
Specified key was too long; max key length is 767 bytes.
). Jika memungkinkan, kurangi ukuran kolom dari 255 menjadi 191 (karena 191 * 4 = 764 <767 <192 * 4 = 768). Setelah itu, tabel dapat dikonversi.sumber
character_set_database
masihutf8
dancollation_database
utf8_bin`. Apakah saya melewatkan sesuatu?character-set-client-handshake = FALSE
ke bagian [mysqld], jadi itu akan selalu menggunakan pengodean default bahkan jika Anda akan membuat kesalahan pada lapisan aplikasiPada MySQL 5.5 yang saya miliki di my.cnf
Hasilnya adalah
sumber
skip-character-set-client-handshake
dilakukan dengan tepat dan dalam kondisi apa diperlukan?show variables like "%collation%";
saya melihat 'collation_connection' sebagaiutf8_general_ci
dan collation_database dan collation_server sebagaiutf8_unicode_ci
. Menambahkan barisskip-character-set-client-handshake
mengubah entri umum menjadi unicode, sehingga ketiganya konsisten.skip-character-set-client-handshake
melakukannya untuk saya (bersama dengan "character-set-server" dan "collation-server", tentu saja - pada Debian 7). Theinit_connect
s tidak membuat perbedaan dengan atau tanpaskip
dan tampak berlebihan. +1 dan terima kasih.catatan: file my.cnf terletak di
/etc/mysql/
Setelah menambahkan baris ini:
Jangan lupa me-restart server:
sumber
NijaCat sudah dekat, tetapi ditentukan secara berlebihan:
Untuk mengatur default ke UTF-8, Anda ingin menambahkan yang berikut ke my.cnf
Kemudian, untuk memverifikasi:
sumber
[mysql] default-character-set=utf8
?[mysqld]
digunakancharacter-set-server
sebagai gantidefault-character-set
Saya juga telah mengetahui bahwa setelah pengaturan di
default-character-set = utf8
bawah[mysqld]
judul, MySQL 5.5.x tidak akan mulai di bawah Ubuntu 12.04 (Precise Pangolin).sumber
[mysqld]
, Anda harus menggunakancharacter-set-server
bukandefault-character-set
. (Sangat membingungkan, saya setuju!)MySQL v5.5.3 dan lebih tinggi:
Cukup tambahkan tiga baris saja di bagian [mysqld]:
Catatan: Termasuk
skip-character-set-client-handshake
di sini menyingkirkan kebutuhan untuk menyertakan keduainit-connect
di[mysqld]
dandefault-character-set
di[client]
dan[mysql]
bagian.sumber
Di bawah Xubuntu 12.04 saya cukup menambahkan
ke /etc/mysql/my.cnf
Dan hasilnya
Juga lihat di http://dev.mysql.com/doc/refman/5.6/en/charset-server.html
sumber
Semua pengaturan yang tercantum di sini benar, tetapi di sini adalah solusi yang paling optimal dan memadai:
Tambahkan ini ke
/etc/mysql/my.cnf
.Harap dicatat, saya memilih utf8_unicode_ci jenis pemeriksaan karena masalah kinerja.
Hasilnya adalah:
Dan ini adalah saat Anda terhubung sebagai pengguna non-SUPER !
Misalnya, perbedaan antara koneksi sebagai pengguna SUPER dan non-SUPER (tentu saja dalam kasus utf8_unicode_ci collation ):
pengguna dengan SUPER priv .:
pengguna dengan non-SUPER priv .:
Saya menulis artikel komprehensif (rus) yang menjelaskan secara terperinci mengapa Anda harus menggunakan satu atau opsi lainnya. Semua jenis Set Karakter dan Collations dianggap: untuk server, database, untuk koneksi, untuk meja dan bahkan untuk kolom.
Saya harap ini dan artikel ini akan membantu memperjelas momen yang tidak jelas.
sumber
utf8_unicode_ci
karena masalah kinerja, lalu, mengapa tidak menggunakannyautf8_bin
?utf8_unicode_ci
sama sekali. Tidak pernah menghabiskan waktu menguji kinerja.Arahan telah berubah menjadi
character-set-system=utf8
http://dev.mysql.com/doc/refman/5.6/en/charset-configuration.html
sumber
Versi MySQL dan distribusi Linux mungkin penting saat membuat konfigurasi.
Namun, perubahan dalam
[mysqld]
bagian ini dianjurkan.Saya ingin memberikan penjelasan singkat tentang jawaban tomazzlender:
[mysqld]
Ini akan mengubah collation_connection menjadi utf8_unicode_ci
Menggunakan
SET NAMES
:SET NAMES akan memengaruhi tiga karakter, yaitu:
Ini akan diatur
character_set_database & character_set_server
Ini hanya akan memengaruhi collation_database & collation_server
Maaf, saya tidak begitu yakin untuk apa ini. Namun saya tidak menggunakannya:
sumber
character_set_server
tidak harus diatur secara manual.character set
saat membuat koneksi database, namun terlihat sedikit menjengkelkan.character_set_server
pada[mysqld]
bagian akan mempengaruhicharacter_set_database
dancharacter_set_server
. Sekarang saya pikir praktik yang baik adalah dengan secara eksplisit menunjukkancharacter set
yang ingin Anda gunakan saat membuat basis data, tabel dan koneksi basis data. Jujur berbicara, dokumentasimysql
tidak begitu mudah dipahami. Apakah Anda tahu jika ada cara umum untuk menyelesaikan semuacharacter set
dancollation
pengaturan di mysql?Pada Fedora 21
Tambahkan ikuti:
Simpan dan keluar.
Final ingat restart layanan mysqld dengan
service mysqld restart
.sumber
MySQL 5.5, yang Anda butuhkan adalah:
collation_server
adalah opsional.sumber
Jika Anda mengalami kesulitan untuk mengkonfirmasi dukungan set karakter klien menggunakan MySQL Workbench, maka ingatlah catatan berikut:
Penting Semua koneksi yang dibuka oleh MySQL Workbench secara otomatis mengatur karakter klien yang ditetapkan ke utf8. Mengubah set karakter klien secara manual, seperti menggunakan SET NAMES ..., dapat menyebabkan MySQL Workbench tidak menampilkan karakter dengan benar. Untuk informasi tambahan tentang set karakter klien, lihat Kumpulan dan Koneksi Karakter.
Jadi saya tidak bisa menimpa set karakter MySQL Workbench dengan perubahan my.cnf. mis. 'set names utf8mb4'
sumber
Jika Anda bingung dengan pengaturan Anda untuk klien dan samb diatur ulang setelah me-restart layanan mysql. Coba langkah-langkah ini (yang cocok untuk saya):
vi /etc/my.cnf
:wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
status;
, Anda akan menemukan set karakter untuk 'klien' dan 'samb' diatur ke 'utf8'.Periksa referensi untuk info lebih lanjut.
sumber
Anda dapat melakukannya dengan cara yang sama, dan jika itu tidak berhasil, Anda perlu me-restart mysql.
sumber
Ubah karakter MySQL:
Klien
mysqld
Kita tidak boleh menulis
default-character-set=utf8
di mysqld, karena itu bisa mengakibatkan kesalahan seperti:Akhirnya:
sumber