За последние 24 часа нас посетили 17560 программистов и 1649 роботов. Сейчас ищут 839 программистов ...

при кодировке UTF-8 неверно работают строковые функции

Тема в разделе "MySQL", создана пользователем vyachesberdio, 22 окт 2015.

  1. vyachesberdio

    vyachesberdio Новичок

    С нами с:
    22 окт 2015
    Сообщения:
    11
    Симпатии:
    0
    Всем здравствуйте!
    При UTF-8 все вроде отображалось верно, но не корректно работали строковые функции с кириллицей.
    Например: select length('йцукен'); выводило 12, в то же время select length('qwerty'); выводило 6.
    Это не давало возможности работать со всеми строковыми функциями.
    Перешел на cp1251(все в my.ini поменял на cp1251, создаю таблицы в cp1251) все стало работать, но появилась новая проблема, не могу работать с load data infile (блокнот не могу сохранить в cp1251).
    Что посоветуете? Может не блокнотом пользоваться, или как-то тонко настроить базу под UTF-8, чтоб строковые функции работали корректно?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    советуют использовать char_length() вместо length()
    кстати substr() с русскими мультибайтными строками работает корректно

    Добавлено спустя 1 минуту 17 секунд:
    это костыльное решение — создает проблем больше, чем решает
     
  4. vyachesberdio

    vyachesberdio Новичок

    С нами с:
    22 окт 2015
    Сообщения:
    11
    Симпатии:
    0
    Спасибо, парни! Выручили, все работает!
    Возник вопрос... Если верить результату SELECT LENGTH(), то теперь мне надо для текстовых переменных типа VARCHAR(ЗНАЧЕНИЕ) задавать ЗНАЧЕНИЕ в ДВА раза больше????
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    в varchar пишется длина в буквах, а не в байтах. всё нормально.
     
  6. vyachesberdio

    vyachesberdio Новичок

    С нами с:
    22 окт 2015
    Сообщения:
    11
    Симпатии:
    0
    Ну теперь буду спать спокойно) Спасибо)