SQL Joins

Sumber:

https://brightwhiz.com/sql-joins-infographic/

Masalah Unknown collation: ‘utf8mb4_0900_ai_ci’ pada MySQL

Permasalahan

  • export database dari MySQL versi baru, untuk diimport ke database MySQL versi lama. Muncul pesan kesalahan “ERROR 1273 (HY000) at line 78: Unknown collation: ‘utf8mb4_0900_ai_ci'”

Penyebab:

  • MySQL versi baru menggunakan collation utf8mb4_0900_ai_ci yang tidak dikenal di MySQL versi lama

Solusi:

Edit file dump

Edit file dump database dengan mengganti string berikut ini:

  • Ganti string “utf8mb4_0900_ai_ci” menjadi “utf8_general_ci”
  • Ganti string “CHARSET=utf8mb4” menjadi “CHARSET=utf8”

Jika file dump database besar sekali (ratusan mega atau beberapa giga), editor teks biasanya tidak sanggup membaca file tersebut. Untuk itu kita bisa menggunakan program ‘sed’ di Linux:


# sed -i 's/utf8mb4_0900_ai_ci/utf8_general_ci/g' dump.sql
# sed -i 's/CHARSET=utf8mb4/CHARSET=utf8/g' dump.sql

Ubah Collation Database

Cara lain adalah dengan cara mengubah collation di database/tabel tersebut

ALTER DATABASE <database_name> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

ALTER TABLE artikel MODIFY url title(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Referensi

Cara Menyambung Python ke MySQL

Kita akan menggunakan package MySQL Connector untuk menyambung Python ke MySQL sehingga kita dapat menjalankan command SQL dalam MySQL melalui Python. Jika package mysql.connector belum diinstall maka install terlebih dahulu dengan menuliskan command ini pada command line:

pip install mysql-connector-python

Buat file Python baru, lalu import mysql.connector

import mysql.connector

Buat connection dengan database di MySQL: (ganti variabel sesuai dengan setting data yang ingin diakses)

mydb = mysql.connector.connect(
 host="localhost",
 user="root",
 password="password",
 database="data"
)

Buat sebuah cursor:

mycursor = mydb.cursor()

Jalankan command SQL, misalnya melihat data:

mycursor.execute("select * from data;") 
myresult = mycursor.fetchall()

Hasil data dari perintah command tadi diambil dengan mycursor.fetchall() dan disimpan di variabel myresult. Hasil dapat dilihat dengan print(myresult).

Selain melihat data, kita juga dapat memasukkan data, misalnya:

mycursor.execute("INSERT INTO `data`.`population` (`name`) VALUES (%s)",”John Doe”)
mydb.commit()

Selama mydb.commit() belum dijalankan, data pada SQL tidak akan berubah.

Ketika sudah selesai, jangan lupa untuk menutup connection:

mydb.close()