Saya menggunakan karakter Emoji di proyek saya. Karakter-karakter itu disimpan (??) ke dalam database mysql. Saya telah menggunakan database Default collation di utf8mb4_general_ci
. Itu menunjukkan
1366 Nilai string salah: '\ xF0 \ x9F \ x98 \ x83 \ xF0 \ x9F ...' untuk kolom 'komentar' di baris 1
ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
insert into tablename (column1,column2,column3,column4,column5,column6,column7) values ('273','3','Hdhdhdhππππhzhzhzzhjzj ζη±δ½ β',49,1,'2016-09-13 08:02:29','2016-09-13 08:02:29'
Atur utf8mb4 dalam koneksi basis data:$database_connection = new mysqli($server, $user,$password,$database_name); $database_connection->set_charset("utf8mb4");
Jawaban:
langkah 1, ubah charset default database Anda:
langkah 2, atur charset saat membuat tabel:
atau ubah tabel
sumber
1) Basis Data: Ubah susunan default Basis Data sebagai
utf8mb4
.2) Tabel: Ubah susunan tabel sebagai
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
.Pertanyaan:
3) Kode:
4) Ditetapkan
utf8mb4
dalam koneksi basis data:sumber
SET NAMES utf8mb4;
untuk mulai menyimpan emotikon; sebelum perintah itu disimpan sebagai??
Basis data dan tabel harus memiliki kumpulan karakter
utf8mb4
dan susunanutf8mb4_unicode_ci
.Saat membuat database baru Anda harus menggunakan:
Jika Anda memiliki database yang sudah ada dan Anda ingin menambahkan dukungan:
Anda juga perlu mengatur set karakter dan susunan yang benar untuk tabel Anda:
atau ubah jika Anda memiliki tabel yang ada dengan banyak data:
Perhatikan bahwa
utf8_general_ci
praktik terbaik tidak lagi direkomendasikan. Lihat tanya jawab terkait:Apa perbedaan antara utf8_general_ci dan utf8_unicode_ci pada Stack Overflow.
sumber
ALTER TABLE mytable MODIFY my_emoji_friendly_text_column VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4_bin
vsutf8mb4_unicode_ci
untuk kolom?Jika Anda menggunakan Solr + Mysql + Java, Anda dapat menggunakan:
Ini bisa digunakan:
Dalam kasus di atas, ini adalah salah satu solusi untuk menyimpan emotikon di sistem Anda.
Langkah-langkah untuk menggunakannya:
Pustaka yang digunakan: import java.net.URLDecoder; import java.net.URLEncoder;
Contoh kode:
sumber
%
, decoding Anda akan rusak.Saya telah memperbarui database dan tabel saya untuk ditingkatkan dari utf8 ke utf8mb4 . Tapi tidak ada yang berhasil untuk saya. Kemudian saya mencoba memperbarui datatype kolom menjadi gumpalan , untungnya itu berhasil bagi saya dan data telah disimpan. Bahkan database dan tabel saya keduanya adalah CHARACTER SET utf8 COLLATE utf8_unicode
sumber
Perintah untuk memodifikasi kolom adalah:
Dan kita perlu menggunakan type =
BLOB
Contoh untuk memodifikasi adalah di bawah: -
Saya memeriksa bahwa mySQL terbaru dan database lain tidak perlu
''
digunakan dalam perintah pada table_name, column_name dll.Mengambil dan Menyimpan data: Langsung menyimpan konten obrolan ke kolom dan untuk mengambil data, ambil data sebagai array byte
(byte[])
dari kolom db dan kemudian mengubahnya menjadistring
misalnya (kode Java)sumber
text
/varchar
keblob
dan Anda selesai. Kegilaan untuk mengubah charset dan collation pada seluruh DB hanya untuk itu :)Jawaban saya hanya menambah jawaban Selvamani P.
Anda mungkin juga perlu mengubah
SET NAMES utf8
kueri apa punSET NAMES utf8mb4
. Itu berhasil bagi saya.Juga, ini adalah artikel yang bagus untuk port situs web Anda dari utf8 ke utf8mb4. Secara khusus artikel ini membuat 2 poin bagus pada indeks dan memperbaiki tabel setelah mengubahnya menjadi utf8mb4:
INDEKS
PERBAIKAN TABEL
Baca selengkapnya tentang kueri untuk memperbaiki tabel pada artikel.
sumber
REPAIR TABLE
danOPTIMIZE TABLE
tidak perlu -ALTER
memiliki efek melakukannya.Poin utama belum disebutkan dalam jawaban di atas bahwa,
Kita perlu meneruskan string kueri dengan opsi
"useUnicode=yes"
dan"characterEncoding=UTF-8"
dalam string koneksiSesuatu seperti ini
sumber
Nah, Anda tidak perlu mengubah Charset Whole DB. Alih-alih itu Anda bisa melakukannya dengan mengubah kolom ke tipe blob .
ALTER TABEL pesan MODIFIKASI konten BLOB;
sumber
Saya punya solusi yang baik untuk menghemat waktu Anda. Saya juga menemui masalah yang sama tetapi saya tidak bisa menyelesaikan masalah ini dengan jawaban pertama.
Karakter defualt Anda adalah utf-8. Tetapi emoji membutuhkan utf8mb4 untuk mendukungnya. Jika Anda memiliki izin untuk merevisi file konfigurasi mysql, Anda dapat mengikuti langkah ini.
Oleh karena itu, lakukan langkah berikut untuk memutakhirkan rangkaian karakter Anda (dari utf-8 ke utf8mb4).
langkah 1. buka my.cnf Anda untuk mysql, tambahkan baris berikut ini ke my.cnf Anda.
Langkah 2. hentikan layanan mysql Anda, dan mulai layanan mysql
Jadi! Kemudian Anda dapat memeriksa karakter Anda diubah menjadi utf8mb4.
sumber
Dukungan Emoji untuk aplikasi yang memiliki tumpukan teknologi - mysql, java, springboot, hibernate
Terapkan perubahan di bawah ini di mysql untuk dukungan unicode.
ALTER DATABASE <database-name> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE <table-name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Koneksi DB - perubahan jdbc url:
jdbc:mysql://localhost:3306/<database-name>?useUnicode=yes&characterEncoding=UTF-8
Catatan - Jika langkah di atas tidak berhasil, perbarui versi konektor mysql ke 8.0.15. (mysql 5.7 berfungsi dengan konektor versi 8.0.15 untuk dukungan unicode)
sumber
Solusi paling sederhana yang berfungsi untuk saya adalah menyimpan data sebagai json_encode .
nanti saat Anda mengambil pastikan saja Anda json_decode itu.
Di sini Anda tidak perlu mengubah susunan atau rangkaian karakter dari database dan tabel.
sumber
Bagi siapa pun yang mencoba untuk memecahkan ini pada contoh MySQL berhasil (dalam kasus saya di AWS RDS), cara termudah adalah untuk memodifikasi kelompok parameter dan mengatur set karakter server dan pemeriksaan untuk menjadi
utf8mb4
danutf8mb4_bin
masing-masing. Setelah me-reboot server, permintaan cepat memverifikasi pengaturan untuk database sistem dan yang baru dibuat:sumber