Неправильный порядок MySQL по varchar

Я создал страницу с ACP и сохранил там свои данные. Все работает без проблем. Но вдруг у меня загадочная проблема. В публичной области я всегда выводю данные в алфавитном порядке, но запись («Поврежденные товары») всегда занимает последнее место.

Моя команда выбрать:

SELECT lyric_id, lyric_title, lyric_lang_00, lyric_text_00, lyric_lang_01,   
       lyric_text_01, lyric_lang_02, lyric_text_02, lyric_lang_03, lyric_text_03, 
       lyric_lang_04, lyric_text_04, lyric_lang_05, lyric_text_05 
FROM dnd_lyrics 
WHERE lyric_text_00!='' OR lyric_text_01!='' OR lyric_text_01!='' OR   
      lyric_text_02!='' OR lyric_text_03!='' OR lyric_text_04!='' OR 
      lyric_text_05!='' OR lyric_text_03!='' ORDER BY lyric_title ASC"

Моя команда вставить:

$db->query("INSERT INTO dnd_lyrics (lyric_title,lyric_lang_00) 
  VALUES('".$db->str($_POST['lyric_title'])."','".$db->str($config['lang'])."')");

Затронутая база данных: https://syntaxhigh.normanhuth.com/FlniL9

Пока что проблема возникла только с этой записью. И если я ввожу его вручную через phpMyAdmin, он работает.

Может быть, перед именем стоит пробел или какой-то другой символ? Какие еще записи? Что показывает var_dump? Вы также можете использовать этот код для SQL-инъекций.

user3783243 28.08.2018 23:15

взглянув на ваши данные, я вижу загадочный символ до того, как Поврежденные товары выглядит как возможный управляющий символ, вот в чем проблема. в зависимости от кодировки отображается как ​

user10226920 28.08.2018 23:21
​ Я этого не вижу. : O
Norman Huth 28.08.2018 23:39

переключиться на кодировку ansi

user10226920 28.08.2018 23:44

ХОРОШО. Спасибо. Я беру содержимое автозаполнения из другой таблицы с названиями треков, и там есть несколько столбцов с той же проблемой. Теперь я должен поискать там. Спасибо.

Norman Huth 28.08.2018 23:52

Не раскладывайте массив по столбцам - сделайте еще одну таблицу.

Rick James 29.08.2018 07:02
​ - это моджибаке для "ZERO WIDTH SPACE".
Rick James 29.08.2018 07:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
118
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Протестировал ваши данные и ваш запрос и получил такой результат:

. . .

|        8 | World War 3                        |
|       79 | W​+​J                              |
|       88 | ​Damaged Goods                     |
+----------+------------------------------------+

Обратите внимание на выравнивание правых полос. В данных есть непечатаемые пробелы. На моем экране это выглядит так:

. . .

|        8 | World War 3                        |
|       79 | W ​+ ​J                              |
|       88 | ​ Damaged Goods                     |
+----------+------------------------------------+

Заголовок «Поврежденные товары» имеет дополнительное непечатаемое пространство в начале, что позволяет отсортировать его после всех остальных заголовков.

Если я открою ваши данные в vim, я увижу:

(88, '<200b>Damaged Goods', 'en',

Юникод 200b - это «пространство нулевой ширины»: https://www.fileformat.info/info/unicode/char/200B/index.htm

Вы должны выполнить какую-то операцию по обрезке пробелов в ваших данных, прежде чем вставлять их в базу данных. К сожалению, функция reglar PHP trim () не справляется с этой задачей.

См. Обрезка пробелов Unicode в PHP 5.2 для решения.


Повторите свой комментарий:

Использование вами функции trim() в PHP не сработает. Функция PHP trim() распознает только пробельные символы ASCII, но не символы Unicode, подобные пробелам. См. http://php.net/trim для списка символов, которые ищет обрезка.

Я встроил функцию обрезки прямо в класс MySQL return $ this-> link-> real_escape_string (trim ($ string));

Norman Huth 28.08.2018 23:37

Обрезка пробелов Unicode в PHP 5.2 - это решение для меня. Спасибо.

Norman Huth 29.08.2018 00:15

Hex ('W + J') = 57 E2808B 2B E2808B 4A (с добавлением некоторого интервала)

Rick James 29.08.2018 07:07

В базе действительно есть знак, который сразу не видно. Вероятно, во время первых тестов с Javascript / Ajax.

Совет Билла Карвина помог. Я добавил функцию «Обрезка пробелов Unicode в PHP 5.2» в свой класс MySQL. И которые просто проходят по таблицам в цикле и переписывают содержимое с помощью этой функции и, таким образом, очищают базу данных.

Спасибо за вашу помощь.

Другие вопросы по теме