Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL][MYSQL]Kodowanie: baza/tabela: latin2, serwer: utf8
Forum PHP.pl > Forum > Przedszkole
shreeve
Witam,
być może ktoś z Was miał podobny problem
Kodowanie serwera: utf8_unicode_ci
Kodowanie skryptu php: utf8
Kodowanie bazy, tabeli i kolumny: latin2_general_ci.
Problem mój polega na tym przy próbie wyszukiwania wyrazu z polskimi znaczkami, np 'ż'. Wyszukiwanie jest "case insensitive", ale nie radzi sobie z polskimi znaczkami, więc wyszukuje tylko takie jakie zostały wpisane.
Próbowałem robić konwersję argumentu wyszukiwanego używając
  1. <?php
  2. $query = iconv("UTF-8", "ISO-8859-2", $query);
  3. ?>

oraz
  1. <?php
  2. $query = mb_convert_encoding($query, "ISO-8859-2", mb_detect_encoding($query));
  3. ?>

ale nic nie dało pożądanych rezultatów.
Próbowałem także używać przed wyszukiwaniem w bazie:
  1. <?php
  2. mysql_query("SET NAMES 'latin2'");
  3. mysql_query("SET CHARACTER SET 'latin2_general_ci'");
  4. ?>

Czy nie powinienem tego zrealizować w transakcji?
Z góry dziękuję za ewentualne możliwe rozwiązania a ja wracam dalej do eksperymentowania.


Grzebię w tym i nic nowego nie wykombinowałem. Może inaczej.
W bazie mam zapisane dane kodowane w utf-8, ale porównywać muszę wyrazy z polskimi znakami diakrytycznymi, więc na chwilę obecną, nie potrafi odróżnić, czy to jest mała czy duża litera (w przypadku znaków diakrytycznych).
Kicok
Spróbuj zmienić metodę porównywania napisów dla tej kolumny na latin2_polish_ci. Jeśli z jakichś względów nie możesz ingerować w strukturę bazy, to dodaj tą informację do zapytania:
  1. SELECT * FROM tabela WHERE kolumna COLLATE latin2_polish_ci = 'GŻEGŻÓŁKA'



PS. SET NAMES informuje bazę jakiego kodowania woli używać klient (PHP), więc jeśli strony masz w UTF, to nie ładuj tam latin2.
shreeve
Niestety, próbuję z tym COLLATE dla kolumny, ale nie mam latin2_polish_ci, a przy próbie COLLATE utf8_unicode_ci/utf8_polish_ci/utf8_general_ci w ogóle nie radzi sobie z polskimi znakami.
-ghost-
plik1.php:

  1. <form method="get" action="plik2.php">
  2.  <p class="head">Szukaj</p>
  3.  <p>
  4.    <input id="searchkeywords" type="text" name="keywords"
  5. <?php
  6. if (isset($_GET['keywords'])) {
  7.  echo ' value="' . htmlspecialchars($_GET['keywords']) . '" ';
  8. }
  9. ?>
  10.    >
  11.    <input id="searchbutton" class="submit" type="submit"
  12.      value="Szukaj">
  13.  </p>
  14.  </form>


plik2.php:
  1. <?php
  2. require_once 'plik1.php';
  3.  
  4. if (isset($_GET['keywords'])) {
  5.  $sql = "SELECT kolumna_id FROM tabela " .
  6.         "WHERE MATCH (title,body) " .
  7.         "AGAINST ('" . $_GET['keywords'] . "' IN BOOLEAN MODE) " .
  8.         "ORDER BY MATCH (title,body) " .
  9.         "AGAINST ('" . $_GET['keywords'] . "' IN BOOLEAN MODE) DESC";
  10.  
  11.  $result = mysql_query($sql, $conn)
  12.    or die('Nie udało się przeprowadzić wyszukiwani: ' . mysql_error());
  13. }
  14. ?>


Kodowanie skryptu php: ISO-8859-2
Kodowanie bazy, tabeli i kolumny: latin2_general_ci.

Po nawiązaniu połączenia i wybraniu bazy danych, ustawienie kodowania na LATIN2:
  1. <?php
  2. define('SQL_HOST','host');
  3.  define('SQL_USER','user');
  4.  define('SQL_PASS','pass');
  5.  define('SQL_DB','bazadanych');
  6.  
  7.  $conn = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS)
  8.    or die('Nieudane połączenie z serwerem bazy danyc: ' . mysql_error());
  9.    
  10.  mysql_select_db(SQL_DB, $conn)
  11.    or die('Nieudany wybór bazy danyc: ' . mysql_error());
  12.    
  13.  $kodowanie = "SET CHARSET LATIN2";
  14.  $results = mysql_query($kodowanie)
  15.        or die(mysql_error());
  16. ?>


Wyszukuje polskie znaki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.