Често задавани въпроси за PHP MySQL набор от символи
Съдържание
Всъщност тази рецепта не се представя за панацея и е тествана правилно заедно с php4/php5 с MySQL 5m, въпреки че мисля, че и с MySQL 4.1 трябва да работи по същия начин. Разбираемо е, че MySQL и php са инсталирани от дистрибуционния комплект, не са използвани специални опции, свързани с кодирането (като --default-charset) при компилиране на MySql - тъй като това е в дистрибуциите. Документът не твърди, че следва точно теминологията.
Терминология: НАБОР НА ХАРАКТЕРИ, СЪБИРАНЕ и защо всичко това е необходимо
CHARACTER SET е набор от символи, известен още като кодиране. Различните НАБОРИ НА ХАРАКТЕРИ включват различни набори от знаци. Различните НАБОРИ НА ХАРАКТЕРИ могат да включват приблизително еднакви набори от символи, но в различен ред (вижте например koi8-r и cp1251) MySQL трябва да знае кой НАБОР НА ХАРАКТЕРИ ще се използва за данни в таблицата, за да сортира правилно и индексира данните. COLLATION описва начина, по който данните в базата данни трябва да бъдат подредени и сравнени. За един и същи НАБОР НА ХАРАКТЕРИ обикновено има няколко СЪБИТИЯ - например: cp1251_general_ci - съпоставяне по подразбиране, без регистрация. cp1251_bin - същото, но чувствително към малки и големи букви.
MySQL не е чувствителен към малки и големи букви по подразбиране!
Заключение: помислете за съпоставяне при създаване на структури от данни.
КОМПЛЕКТ И СЪБИРАНЕ НА ПАРАМЕТРИ ЗА ХАРАКТЕРИ могат да бъдат посочени на няколко места:
MySQL: как да създавате бази данни и таблици правилно
Най-лесният начин за избягване на грешки е създаването на база данни с правилния НАБОР НА ХАРАКТЕРИ и СЪБИРАНЕ
В този случай всички таблици, създадени в тази база данни, ако CHARACTER SET и COLLATION не са изрично зададени, ще имат съответно SET по подразбиране CHARACTER SET и COLLATION cp1251 и cp1251_bin. За съжаление потребителят не винаги може да създаде база данни с необходимите параметри. няма често права на root на сървъра mysql.
Ако е невъзможно да се повлияе на параметрите на базата данни, трябва да създадете таблици правилно
В този случай всички "текстови" колони ще имат CHARACTER SET cp1251 и COLLATION cp1251_bin
В повечето случаи това е достатъчно, но.
Нека проверим какво се е случило:
Както можете да видите, първата колона е чувствителна към малки и големи букви, а втората не. Q.E.D.
PHP/PERL и други: как да се работи правилно с MySQL
Всеки клиент на mysql може да зададе няколко променливи при свързване към сървъра: