Adakah yang bisa memberi tahu saya jika SELECT
kueri MySQL adalah case-sensitive atau case-insensitive secara default? Dan jika tidak, permintaan apa yang harus saya kirim agar saya dapat melakukan sesuatu seperti:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
Dimana dalam kenyataannya, nilai sebenarnya Value
adalah IAreSavage
.
'value' in ('val1', 'val2', 'val3')
Jawaban:
Mereka tidak peka huruf besar kecil , kecuali Anda melakukan perbandingan biner .
sumber
Anda dapat mengurangi nilai dan parameter yang diteruskan:
Cara lain (yang lebih baik) adalah menggunakan
COLLATE
operator seperti yang disebutkan dalam dokumentasisumber
SELECT
pernyataan ini terlihat menggunakanCOLLATE
itu?LOWER()
atauCOLLATE
klausa sewenang-wenang dapat sepenuhnya mem-bypass indeks, dan seiring waktu, seiring pertumbuhan tabel Anda, ini dapat memiliki implikasi kinerja yang drastis. Kemungkinan ini adalah nama pengguna yang Anda cari? Gunakan susunan case-insensitive dan tambahkan indeks unik ke kolom. GunakanEXPLAIN
untuk mengonfirmasi bahwa indeks sedang digunakan.GUNAKAN BINARY
Ini adalah pilihan sederhana
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
Ini adalah pilih dengan biner
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
atau
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
sumber
Perbandingan adalah case-sensitive ketika kolom menggunakan collation yang diakhiri dengan
_ci
(seperti collation defaultlatin1_general_ci
) dan mereka case-sensitive ketika kolom menggunakan collation yang diakhiri dengan_cs
atau_bin
(sepertiutf8_unicode_cs
danutf8_bin
collations).Periksa susunan
Anda dapat memeriksa server , basis data , dan koneksi Anda menggunakan:
dan Anda dapat memeriksa susunan tabel Anda menggunakan:
Ubah susunan
Anda dapat mengubah basis data, tabel, atau kolom Anda menjadi sesuatu yang sensitif huruf sebagai berikut:
Perbandingan Anda sekarang harus peka terhadap huruf besar-kecil.
sumber
Perbandingan string dalam frase WHERE tidak peka huruf besar-kecil. Anda dapat mencoba membandingkan menggunakan
atau
dan Anda akan mendapatkan hasil yang sama . Itu adalah perilaku default MySQL.
Jika Anda ingin perbandingan menjadi peka huruf besar-kecil , Anda dapat menambahkan
COLLATE
seperti ini:SQL itu akan memberikan hasil yang berbeda dengan yang ini: WHERE
colname
COLLATE latin1_general_cs = 'kata kunci'latin1_general_cs
adalah pemeriksaan umum atau standar di sebagian besar basis data.sumber
Susunan yang Anda pilih menetapkan apakah Anda peka huruf besar kecil atau kecil.
sumber
Defaultnya adalah case-sensitive, tetapi hal terpenting berikutnya yang harus Anda perhatikan adalah bagaimana tabel itu dibuat di tempat pertama, karena Anda dapat menentukan sensitivitas case ketika Anda membuat tabel.
Script di bawah ini membuat tabel. Perhatikan di bagian bawah tertulis "COLLATE latin1_general_cs". Bahwa cs pada akhirnya berarti case sensitif. Jika Anda ingin meja Anda menjadi case-sensitive Anda akan meninggalkan bagian itu atau menggunakan "COLLATE latin1_general_ci".
Jika proyek Anda sedemikian rupa sehingga Anda dapat membuat tabel Anda sendiri, maka masuk akal untuk menentukan preferensi sensitivitas kasus Anda saat Anda membuat tabel.
sumber
SQL Select tidak peka huruf besar kecil.
Tautan ini dapat menunjukkan kepada Anda cara membuat case-sensitive: http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my- sql-queries-case-sensitive.html
sumber
Coba dengan:
sumber
Perhatikan juga bahwa nama tabel peka huruf besar-kecil di Linux kecuali jika Anda mengatur
lower_case_table_name
direktif konfigurasi ke 1 . Ini karena tabel diwakili oleh file yang peka huruf besar kecil di Linux.Terutama waspadalah terhadap pengembangan pada Windows yang tidak peka huruf besar-kecil dan menggunakan untuk produksi di tempat itu. Sebagai contoh:
terhadap tabel myTable akan berhasil di Windows tetapi gagal di Linux, lagi, kecuali direktif di atas diatur.
Referensi di sini: http://dev.mysql.com/doc/refman/5.0/id/identifier-case-sensitivity.html
sumber
lower_case_table_name
seperti yang ditentukan dalam jawaban yang kami komentariSolusi yang saat ini diterima sebagian besar benar.
Jika Anda menggunakan string non-biner (CHAR, VARCHAR, TEXT), perbandingan tidak peka huruf besar-kecil , sesuai susunan standar.
Jika Anda menggunakan string biner (BINARY, VARBINARY, BLOB), perbandingan bersifat case-sensitive, jadi Anda harus menggunakan
LOWER
seperti yang dijelaskan dalam jawaban lain.Jika Anda tidak menggunakan collation default dan Anda menggunakan string non-biner, sensitivitas case ditentukan oleh collation yang dipilih.
Sumber: https://dev.mysql.com/doc/refman/8.0/id/case-sensitivity.html . Baca dengan cermat. Beberapa yang lain salah mengartikannya bahwa perbandingan harus peka terhadap huruf besar atau kecil. Ini bukan kasusnya.
sumber
Kamu bisa mencobanya. semoga bermanfaat.
sumber
Bidang string dengan set bendera biner akan selalu peka huruf besar-kecil. Jika Anda memerlukan pencarian case-sensitive untuk bidang teks non-biner, gunakan ini: SELECT 'test' REGEXP BINARY 'TEST' SEBAGAI HASIL;
sumber