MySQL'de nonbinary string tipleri (char, varchar, text) büyük küçük harf ayırmaksızın karşılaştırılır. Örneğin username like 'admin' gibi bir sorgu koşulunda dönen sonuçlar içinde username'i admin, ADmin, ADMIN, vb. olan kayıtlar da getirilecektir.
Böyle bir sonucu engellemek için ya veritabanı oluşturulurken schema tanımının collation tipini ya da sorunu yaşadığınız kolonun collation tipini binary olacak şekilde ayarlamanız gerekiyor:
CREATE DATABASE mobileme CHARACTER SET utf8 COLLATE utf8_bin;
ya da
ALTER TABLE table_name MODIFY username VARCHAR(25) CHARACTER SET utf8 COLLATE utf8_bin;
Varolan schema'da böyle bir sıkıntınız varsa tüm schema'nın collate tipini değiştirmek için aşağıdaki sorgunun ürettiği sorgucukları işletmeniz yeterli:
SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;') as stmt
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'schema_name'
ORDER BY 1;
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'schema_name'
ORDER BY 1;
Hiç yorum yok:
Yorum Gönder