Често задавани въпроси за 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 не е чувствителен към малки и големи букви по подразбиране!

Заключение: помислете за съпоставяне при създаване на структури от данни.

КОМПЛЕКТ И СЪБИРАНЕ НА ПАРАМЕТРИ ЗА ХАРАКТЕРИ могат да бъдат посочени на няколко места:

  • За целия сървър - при стартиране на mysqld
  • За целия сървър - при компилация:
  • За DB, таблица и колона - при създаване на DB и таблица

    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 може да зададе няколко променливи при свързване към сървъра: