Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL][MYSQL]Kodowanie: baza/tabela: latin2, serwer: utf8
shreeve
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 24.04.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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).

Ten post edytował shreeve 23.09.2008, 10:50:59
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
shreeve
post
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 24.04.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
--ghost--
post
Post #4





Goście







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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:53