Функция MySQL LOWER () небезопасна для символа º? - PullRequest
2 голосов
/ 05 января 2012

Когда я кодирую следующий символ в UTF-8:

º

Я получаю:

º

Затем, сохраняя в качестве значения поля º, я выбираю поле с помощью функции LOWER () и получаю

âº

Я ожидал, что это будет уважать, что значение является многобайтовым символом и поэтому не будет НИЖЕ выполнять его.

Ожидаемое:

º

Я не правильно понимаю, что функция LOWER () должна быть многобайтовой, как указано в руководстве? (http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_lower)

Или я здесь что-то не так делаю?

Я использую MySQL 5.1.

EDIT

Кодировка в таблице установлена ​​в UTF-8. Кодировка сеанса по умолчанию latin1.

Вот мои шаги воспроизведения.

CREATE TABLE test_table (
  test_field VARCHAR(1000) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO test_table(test_field) VALUES('º');

SELECT LOWER(test_field) FROM test_table;

1 Ответ

0 голосов
/ 05 января 2012
INSERT INTO test_table(test_field) VALUES('º');

Вставит 2-символьную строку, которая имеет правильное значение LOWER (), равное "º"

  • Ниже ("Â") равно "â"
  • Ниже(«º») - это «º»

Если вы хотите вставить «º», убедитесь, что у вас есть

SET NAMES 'utf-8';

и

INSERT INTO test_table(test_field) VALUES('º');
...