Dokumen ini menjelaskan cara mengonversi database MySQL (DB) Anda dari kumpulan karakter Latin-1 ke format Unicode (UTF-8). Dokumen ini diadaptasi dari Show
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 16 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 17 Mengubah Set Karakter MySQL Default ke UTF-8Anda 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 18
[client] .. ... ... character-set-server=utf8 ...._
[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 18 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 KosongJika Anda membuat skema DB dan DB Anda masih kosong, selesaikan langkah-langkah berikut
ALTER DATABASE mydatabasename charset=utf8; Mengonversi Database yang Berisi TabelJika 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 MacOSLangkah-langkah berikut menunjukkan cara membuat dump DB, mengedit dump DB sehingga rangkaian karakter dan susunan yang benar digunakan, lalu memulihkan DB baru
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
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
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.sql3 dengan mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql4. 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.sql5 dengan mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql6. Perintah ketiga menyimpan file dan keluar dari editor
mysql -u username -p password < dump-fixed.sql Contohmysqldump -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 WindowsLangkah-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.sql8) dan susunan ( mysqldump -u username -p password -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql9) digunakan, lalu memulihkan DB baru. Untuk ini, unduh terlebih dahulu Super Sed (Win32 dapat dieksekusi, di-zip)
[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 BenarDalam 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
[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_ciKasus 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 16. 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 17
[mysqld] .. ... character-set-server=utf8 collation-server=utf8_general_ci .. ..._2
[mysqld] .. ... character-set-server=utf8 collation-server=utf8_general_ci .. ..._3
[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
[mysqld] .. ... character-set-server=utf8 collation-server=utf8_general_ci .. ..._6
[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
[mysqld] .. ... character-set-server=utf8 collation-server=utf8_general_ci .. ..._8
[mysqld] .. ... character-set-server=utf8 collation-server=utf8_general_ci .. ..._9
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 10
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
[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
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
|