При сравнении строк в PHP тем же путем MySQL делает

Если вы перезаписываете шаблон, вам нужно установить собственный модуль

Vendor_Module::images_dimensions_chart.phtml

, базовый путь для шаблонов внешнего интерфейса в вашем модуле всегда равен Vendor/Module/view/frontend/templates

6
задан Benjamin 27 February 2014 в 19:40
поделиться

4 ответа

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

Для ответа на вопрос можно использовать iconv трансзамусорить текст и затем сравнить его. Например:

function compare($s1, $s2) {
  return strcmp(
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s1),
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s2));
}

Это в основном, что MySql сделает для Вас, хотя это, вероятно, быстрее, и это может иметь немного отличающуюся таблицу сопоставления, чем ISO-8859-1//TRANSLIT. Не совсем уверенный в этом.

Вероятно, было бы легче использовать базу данных, хотя, как другие уже предположили.

9
ответ дан 9 December 2019 в 22:41
поделиться

Почему Вы только не позволяете MySQL решить, существует ли уже запись с тем же ключом?

Вы могли выполнить a SELECT запрос, чтобы спросить, существует ли уже запись с этим атрибутом:

SELECT 1
FROM UniTest
WHERE str = "À"

Или Вы просто даете ему попытку, вставляющую новую запись, и используете функции mysql_error () и mysql_errno (), чтобы видеть, произошла ли ошибка.

1
ответ дан 9 December 2019 в 22:41
поделиться

Был бы это быть разумным только позволить MySQL сделать работу, путем представления запроса MySQL как:

SELECT CASE WHEN '$a' = '$b' THEN 1 ELSE 0 END


Разъяснение сообщения РЕДАКТИРОВАНИЯ:

Вы могли одноразовый выполнять итерации через весь набор символов интереса, декартова соединенный с собой и создавать стандарт php ассоциативный массив эквивалентных наборов.

    for each $char1 in $charset {  
        for each $char2 in $charset {  
            $charmatch[$char1][$char2] = mysqlTestMatch($char1, $char2));  
        }  
    }  

Затем необходимо было бы протестировать каждый символ строки символом, чтобы видеть, если a), они - то же, или в противном случае b), они эквивалентны.

1
ответ дан 9 December 2019 в 22:41
поделиться

Так, если бы я получаю его правильно, Вы хотите сделать, подобное выдерживает сравнение в PHP, поскольку Вы вошли бы в проверку по сравнению с регистрацией Общего индекса UTF-8 MySQL?

Самая легкая вещь состояла бы в том, чтобы создать функцию помощника, которая преобразует строку согласно правилам utf8_general_ci, используемым MySSQL, который должен главным образом преобразовать определенные буквы в основную букву.

Правила для того сопоставления MySQL перечислены здесь:

http://www.collation-charts.org/mysql60/mysql604.utf8_general_ci.european.html

Например, если Вы прокрутите вниз просто немного к "золоту" слева, то Вы будете видеть все символы, которые преобразовываются в это A.

Учитывая функцию помощника, вызванную, например, utf8g_to_ascii(), Вы могли записать функцию:

function utf8_compare($s1, $s2) {
   $a = utf8g_to_ascii($s1);
   $b = utf8g_to_ascii($s2);
   return strcmp( $a, $b );
}

Я смоделировал бы свой код после:

http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php
0
ответ дан 9 December 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: