Saya melihat-lihat beberapa dan tidak menemukan apa yang saya cari jadi begini.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
Ini berfungsi dengan baik, tetapi tidak jika pohon tersebut dinamai Elm atau ELM dll ...
Bagaimana cara membuat SQL case peka untuk pencarian wild-card ini?
Saya menggunakan MySQL 5 dan Apache.
mysql
sql
sql-like
case-insensitive
David Morrow
sumber
sumber
BINARY
seperti di sini: stackoverflow.com/questions/7857669/…like
harus case-insensitive secara default.Jawaban:
Sebenarnya, jika Anda menambah
COLLATE UTF8_GENERAL_CI
definisi kolom Anda, Anda bisa menghilangkan semua trik ini: itu akan bekerja secara otomatis.Ini juga akan membangun kembali indeks apa pun pada kolom ini sehingga dapat digunakan untuk kueri tanpa memimpin '%'
sumber
COLLATE UTF8_GENERAL_CI
definisi kolom Anda, Anda bisa menghilangkan semua trik ini: itu akan bekerja secara otomatis.ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI
. Ini juga akan membangun kembali indeks apa pun pada kolom ini sehingga dapat digunakan untuk kueri tanpa memimpin '%'.Saya selalu memecahkan ini dengan menggunakan yang lebih rendah:
sumber
Sensitivitas huruf didefinisikan dalam pengaturan kolom / tabel / pengaturan basis data. Anda dapat melakukan kueri di bawah susunan khusus dengan cara berikut:
misalnya.
(Ganti
utf8_general_ci
dengan pemeriksaan apa pun yang menurut Anda berguna). The_ci
singkatan kasus sensitif .sumber
utf8_general_ci
berfungsi dengan baik, meskipun.COLLATE
atau melakukan trik sederhana seperti ini (LOWER()
kedua string Anda sebelum perbandingan)SELECT * FROM products WHERE name COLLATE utf8_general_ci LIKE 'AB47TU';
Ini adalah contoh dari query LIKE:
Sekarang, case-insensitive menggunakan RENDAH () func:
sumber
COLLATE
masalah formatCukup gunakan:
Atau Gunakan
Keduanya berfungsi sama
sumber
Saya melakukan sesuatu seperti itu.
Mendapatkan nilai dalam huruf kecil dan MySQL melakukan sisanya
Dan Untuk MySQL PDO Alternatif:
sumber
Saya pikir permintaan ini akan melakukan pencarian case-sensitive:
sumber
menggunakan
ILIKE
itu berhasil untuk saya !!
sumber
Anda tidak perlu ke
ALTER
meja apa pun. Cukup gunakan kueri berikut, sebelumSELECT
kueri aktual yang ingin Anda gunakan wildcard:sumber
baik di mysql 5.5, seperti operator tidak sensitif ... jadi jika lembah Anda adalah elm atau ELM atau Elm atau eLM atau yang lainnya, dan Anda menggunakan seperti '% elm%', itu akan mencantumkan semua nilai yang cocok.
Saya tidak bisa mengatakan tentang versi mysql sebelumnya.
Jika Anda menggunakan Oracle, suka bekerja sebagai case-sensitive, jadi jika Anda mengetik seperti '% elm%', itu hanya berlaku untuk ini dan abaikan huruf besar ..
Aneh, tapi begini :)
sumber
*_ci
, yang merupakan singkatan dari "case-sensitive". Karena ini adalah default untuk semua set karakter yang didukung (masalahshow character set;
untuk memeriksa ini) - jawabannya sebagian benar :-) Hanya alasannya yang salah. Ini bukan operator yang case-sensitive, ini adalah collation default.sumber
Anda harus mengatur penyandian dan pengumpulan yang tepat untuk tabel Anda.
Pengkodean tabel harus mencerminkan pengodean data aktual. Apa pengkodean data Anda?
Untuk melihat penyandian tabel, Anda bisa menjalankan kueri
SHOW CREATE TABLE tablename
sumber
Ketika saya ingin mengembangkan pencarian kasus yang tidak sensitif, saya selalu mengonversi setiap string menjadi huruf kecil sebelum melakukan perbandingan
sumber
Anda dapat menggunakan metode berikut
gunakan metode ini seperti di bawah ini
sumber
Perbandingan string non-biner (termasuk
LIKE
) tidak peka huruf besar-kecil di MySql: https://dev.mysql.com/doc/refman/en/case-sensitivity.htmlsumber