Witajcie!

Mam problem z poprawnym zapisywanie znaków narodowych (np. polskich, niemieckich czy czeskich) w bazie MySQL.

Mam np. wyraz "Götabergsgatan", który w bazie zapisywany jest jako "Götabergsgatan", czy
"Média", który w bazie jest zapisany jako "Média".

Dane eksportuje później z poziomu phpMyAdmin (format CSV dla MS Excel) i tam również źle wyświetlają się znaki.


Próbowałem tworzyć tabele z różnym kodowaniem...


  1. CREATE TABLE IF NOT EXISTS `ns_dane` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  4. `street` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
  7.  
  8.  
  9. CREATE TABLE IF NOT EXISTS `ns_dane` (
  10. `id` int(11) NOT NULL AUTO_INCREMENT,
  11. `name` varchar(255) NOT NULL,
  12. `street` varchar(255) NOT NULL,
  13. PRIMARY KEY (`id`)
  14. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  15.  
  16.  
  17. CREATE TABLE IF NOT EXISTS `ns_dane` (
  18. `id` int(11) NOT NULL AUTO_INCREMENT,
  19. `name` varchar(255) NOT NULL,
  20. `street` varchar(255) NOT NULL,
  21. PRIMARY KEY (`id`)
  22. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;



Nie wiem czy jest to istotne, ale zapisywanie rekordów robię za pomocą

  1. $query = "INSERT INTO ns_dane (name, street) VALUES ('".$name[1]."', '".$street[1]."')";
  2. $result = $db->query($query);


Będę wdzięczny za pomoc i nakierowanie na rozwiązanie problemu.

Pozdrawiam
R.


Udało mi się rozwiązać problem przy pomocy znalezionego w internecie kodu. Przed zapisaniem danych do bazy przepuszczam je przez:

  1. function makeStringUTF8($data){
  2. if (strpos($data, '&') !== false)
  3. {
  4. $data = html_entity_decode($data, ENT_QUOTES, 'UTF-8');
  5. }
  6.  
  7. return utf8_encode(utf8_decode($data));
  8. }