Tidak dapat mengonversi data teks mysql

Dokumen ini menjelaskan cara mengonversi database MySQL (DB) Anda dari kumpulan karakter Latin-1 ke format Unicode (UTF-8). Dokumen ini diadaptasi dari

Server CloudBees CD (CloudBees Flow) memerlukan UTF-8 untuk dukungan multibahasa yang lebih baik. Anda harus menyimpan semua data Anda dalam UTF-8 dan pemeriksaan case-insensitive (utf8_general_ci)

Kasus uji untuk mengonversi database

Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
_5 menjadi
Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
6 ada di bagian akhir dokumen ini. File test case ada di lampiran
Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
7

Mengubah Set Karakter MySQL Default ke UTF-8

Anda harus mengubah MySQL untuk menggunakan UTF-8 sebagai rangkaian karakternya dan mengubah DB Anda menjadi UTF-8. Prosedur di bawah ini juga mencakup pembuatan versi UTF-8 DB menggunakan

Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
8

  1. Edit bagian

    Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
    org.hibernate.exception.GenericJDBCException: could not execute batch
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    
    ......
    
    Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
    _9 dari
    ALTER DATABASE mydatabasename charset=utf8;
    0 (file konfigurasi MySQL) untuk dibaca

[client] .. ... ...
character-set-server=utf8 ....
_

  1. Edit bagian

    ALTER DATABASE mydatabasename charset=utf8;
    1 di
    ALTER DATABASE mydatabasename charset=utf8;
    0 untuk dibaca

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_

Setelah mengubah set karakter default Anda ke UTF-8, Anda akan menggunakan

Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
8 untuk memulihkan DB Anda dengan parameter
ALTER DATABASE mydatabasename charset=utf8;
4 untuk memulihkannya dengan set karakter UTF-8 default baru Anda

Opsi

ALTER DATABASE mydatabasename charset=utf8;
5 dan
ALTER DATABASE mydatabasename charset=utf8;
6 tidak digunakan lagi di MySQL 5. 5. 43. Jika Anda menggunakan MySQL versi 5. 5. 43 atau lebih baru, Anda harus menghapus opsi ini dari file konfigurasi
ALTER DATABASE mydatabasename charset=utf8;
7 atau
ALTER DATABASE mydatabasename charset=utf8;
8 Anda. Jika tidak, Anda mungkin melihat pesan kesalahan berikut

Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1

Mengubah Basis Data Kosong

Jika Anda membuat skema DB dan DB Anda masih kosong, selesaikan langkah-langkah berikut

  1. Masuk ke instans MySQL Anda

  2. Jalankan kueri berikut di DB Anda untuk mengubahnya menjadi UTF-8

ALTER DATABASE mydatabasename charset=utf8;

Mengonversi Database yang Berisi Tabel

Jika server CloudBees CD (CloudBees Flow) Anda sudah memiliki MySQL DB yang terpopulasi dan Anda mendapatkan error, gunakan prosedur berikut untuk mengonversi database Anda

Linux dan MacOS

Langkah-langkah berikut menunjukkan cara membuat dump DB, mengedit dump DB sehingga rangkaian karakter dan susunan yang benar digunakan, lalu memulihkan DB baru

  1. Buka jendela terminal dan pindah ke direktori sementara

  2. Keluarkan DB

mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql

Argumen dalam perintah ini membersihkan set karakter dan menyediakan dump yang tidak akan menimbulkan masalah jika Anda memindahkan DB ke server DB yang berbeda atau perlu memulihkan DB pada sistem yang dikembalikan. Untuk deskripsi lengkap dari argumen ini, lihat https. //dev. mysql. com/doc/refman/5. 7/en/mysqldump. html

Saat Anda menjalankan perintah ini, dump DB dibuat menjadi

ALTER DATABASE mydatabasename charset=utf8;
9

  1. Selanjutnya, buat cadangan

    ALTER DATABASE mydatabasename charset=utf8;
    _9 dengan memasukkan

cp dump.sql dump-fixed.sql

Anda akan memodifikasi

mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
_1 dan akan menyimpan
ALTER DATABASE mydatabasename charset=utf8;
9 sebagai cadangan

  1. Edit file dump dan perbaiki karakter yang salah yang telah digunakan. Anda dapat menggunakan editor atau program pencarian-dan-ganti seperti VIM

vim dump-fixed.sql
:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
:wq

Perintah pertama memodifikasi kumpulan karakter dan susunan default DB dengan mengganti semua contoh

mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
3 dengan
mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
4. Perintah kedua mengonversi semua tabel dari Latin-1 ke UTF-8 dengan mengganti semua instance
mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
5 dengan
mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
6. Perintah ketiga menyimpan file dan keluar dari editor

  1. Kembalikan DB dari atas DB yang ada

mysql -u username -p password < dump-fixed.sql

Contoh

mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
cp dump.sql dump-fixed.sql
vim dump-fixed.sql
:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
:wq
mysql -u username -p password < dump-fixed.sql

atau sebagai alternatif menggunakan

mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
_7

# $1-dbusername $2-password $3-dbname
mysqldump -u$1 -p$2 -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B $3 > dump.sql
sed -i.bak -e 's/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/' -e 's/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/' dump.sql
mysql -u$1 -p$2 < dump.sql

Windows

Langkah-langkah berikut menunjukkan cara membuat dump DB, mengeditnya sehingga rangkaian karakter yang benar (

mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
8) dan susunan (
mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
9) digunakan, lalu memulihkan DB baru. Untuk ini, unduh terlebih dahulu Super Sed (Win32 dapat dieksekusi, di-zip)

  1. Buka jendela perintah dan pindah ke folder sementara

  2. Memasuki

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_0

Untuk deskripsi lengkap dari argumen ini, lihat https. //dev. mysql. com/doc/refman/5. 7/en/mysqldump. html

Jika Karakter Khusus Tidak Diimpor dengan Benar

Dalam keadaan tertentu, saat Anda memulihkan dump MySQL berenkode UTF-8, karakter khusus internasional (yang dapat Anda lihat dengan benar menggunakan, misalnya, editor VIM), mungkin tidak dapat diimpor dengan benar. Dalam kasus seperti itu, Anda mungkin ingin mencoba yang berikut ini di bawah sistem Linux atau UNIX

  1. Masuk ke MySQL

  2. Buat DB dengan pengkodean UTF-8

  3. Impor dump Anda dengan menggunakan perintah MySQL

    cp dump.sql dump-fixed.sql
    0

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_1

Uji Kasus untuk Mengonversi database CHARACTER SET latin1 COLLATE latin1_swedish_ci ke CHARACTER SET utf8 COLLATE utf8_general_ci

Kasus uji ini mengubah

Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
_5 DB menjadi
Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
6. File test case ada di lampiran
Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
7

  1. Masuk ke instans MySQL Anda

  2. Buat DB yang berisi

    cp dump.sql dump-fixed.sql
    4

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_2

  1. Beralih ke DB itu

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_3

  1. Periksa apakah susunan di DB adalah

    cp dump.sql dump-fixed.sql
    5

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_4

Output akan muncul sebagai berikut

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_5

Baris

cp dump.sql dump-fixed.sql
_6 menunjukkan collation

  1. Buat tabel dengan

    cp dump.sql dump-fixed.sql
    _7

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_6

  1. Dari baris perintah OS, masukkan perintah berikut untuk mengekspor skema

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_7

7 Periksa

cp dump.sql dump-fixed.sql
_8 dan susunan untuk DB, tabel, dan kolom

  1. Sisipkan data uji untuk memastikan tabel tidak kosong

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_8

  1. Dari baris perintah OS, masukkan perintah berikut untuk mengekspor dump seperti yang disebutkan di atas

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_9

  1. Dari baris perintah OS, masukkan perintah berikut untuk memperbaiki kumpulan karakter dan susunan dalam file yang diekspor ke

    mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
    8

Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
0

  1. Dari baris perintah OS, masukkan perintah berikut untuk mengimpor dump baru, yang sekarang memiliki

    mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
    8
    cp dump.sql dump-fixed.sql
    8 dan susunan untuk DB, tabel, dan kolom

Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
_1

  1. Keluar dari DB lalu sambungkan kembali dan periksa apakah susunan di DB adalah

    mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
    8

[mysqld] .. ...
character-set-server=utf8
collation-server=utf8_general_ci
.. ...
_4

Output akan muncul sebagai berikut

Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
_3

Baris

vim dump-fixed.sql
:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
:wq
_3 menunjukkan collation

  1. Dari baris perintah OS, masukkan perintah berikut untuk mengekspor skema

Operation exception: org.hibernate.exception.GenericJDBCException: could not execute batch
org.hibernate.exception.GenericJDBCException: could not execute batch
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)

......

Caused by: java.sql.BatchUpdateException: Incorrect string value: '\x96d "|"...' for column 'command_clob' at row 1
_4

  1. Pastikan

    cp dump.sql dump-fixed.sql
    _8 dan collation untuk DB, tabel, dan kolom sekarang
    mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
    8 dan collation case-insensitive (
    vim dump-fixed.sql
    :%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
    :%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
    :wq
    6)

    Bagaimana cara mengubah utf8mb4 ke utf8 di MySQL?

    Untuk mengatasi masalah buka file SQL yang diekspor, cari dan ganti utf8mb4 dengan utf8 , setelah itu cari dan ganti utf8mb4_unicode_520_ci dengan utf8_general_ci. Simpan file dan impor ke database Anda. Setelah itu, ubah wp-config. php charset ke utf8 , dan keajaiban dimulai

    Bagaimana cara mengubah pengkodean MySQL ke UTF

    Untuk mengubah pengkodean set karakter ke UTF-8 untuk database itu sendiri, ketikkan perintah berikut di prompt mysql>. Ganti dbname dengan nama database. Salin ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci ; .

    Apa perbedaan antara utf8mb3 dan utf8mb4?

    utf8mb3 hanya mendukung karakter di Basic Multilingual Plane (BMP). utf8mb4 juga mendukung karakter tambahan yang berada di luar BMP . utf8mb3 menggunakan maksimal tiga byte per karakter. utf8mb4 menggunakan maksimal empat byte per karakter.

    Bagaimana cara mengubah pengkodean tabel di MySQL?

    Anda dapat mengubah default dengan charset default set table ubah tetapi itu tidak akan mengubah charset dari kolom yang ada. Untuk mengubahnya, Anda perlu menggunakan kolom modifikasi tabel ubah . Mengubah charset dari kolom hanya berarti bahwa itu akan dapat menyimpan lebih banyak karakter.