Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Duplikaty przy dodawaniu rekordów z polskimi znakami
Forum PHP.pl > Forum > Bazy danych > MySQL
lukass
Witam,

mam problem przy jednej tabeli i zastanawiam się co może powodować dziwną sytuację. Mianowicie przy dodaniu do tabeli frazy bez polskich znaków i próba dodania takiej samej z polskimi znakami powoduje wywalenie 1062 i niemożność dodania takowego rekordu.

Tabela:

  1. CREATE TABLE `frazy` (
  2. `id_oph` INT(11) NOT NULL AUTO_INCREMENT,
  3. `hash` CHAR(10) DEFAULT NULL COLLATE 'utf8_unicode_ci',
  4. `phrase` VARCHAR(228) DEFAULT NULL COLLATE 'utf8_unicode_ci',
  5. PRIMARY KEY (`id_oph`),
  6. UNIQUE INDEX `hash_phrase` (`hash`, `phrase`)
  7. )
  8. COLLATE='utf8_unicode_ci'
  9. ENGINE=MyISAM


Połączenie z bazą zawiera:

  1. mysql_select_db($db_name,$mysql);
  2.  
  3. mysql_query("SET NAMES 'utf8'");
  4. mysql_query('SET CHARACTER SET utf8_unicode_ci');
  5. mysql_query('SET CHARACTER_SET_RESULTS="utf8"');
  6. mysql_query("SET time_zone = 'Europe/Warsaw';");


Ktoś zna przyczynę, dlaczego MySQL traktuje część polskich znaków jako niediakrytyczne?
Z tego co zauważyłem nie dotyczy to wszystkich znaków, np. ł nie łapie, natomiast ś, ą czy ó już wywala jako duplikat.
BaN
Proponuję zmienić typ porównywania dla pola `phrase` na utf8_polish_ci
lukass
To pomogło, pytanie dlaczego unicode_ci nie rozróżnia tych znaków, chociaż powinien?

Co do zmiany, zamienię na utf8_bin, z tego względu, że trzymam tam też słowa w innych językach (np. niemieckie).
bostaf
Cytat(lukass @ 7.10.2012, 17:25:51 ) *
To pomogło, pytanie dlaczego unicode_ci nie rozróżnia tych znaków, chociaż powinien?

Dokumentacja nie precyzuje tego zbyt dokładnie:
"utf8_general_ci collation are faster, but slightly less correct"... slightly less to nie jest pojęcie, którym posługuje się inżynier i które oznacza, że projektanci MySQL też nie bardzo wiedzą dlaczego tak się dzieje smile.gif Jest tam dalej przykład kilku różnych liter rozpoznawanych jako takie same. Trzeba z tym po prostu żyć, albo tak jak wykombinowałeś - zmienić kodowanie na utf8_bin.
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.