• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

excel do csv do phpmyadmin z polskimi znakami oraz znakami specjalnymi

0 głosów
2,380 wizyt
pytanie zadane 2 listopada 2018 w SQL, bazy danych przez Gucci93 Użytkownik (570 p.)

Do mojego projektu używam bazy, którą tworzę w excelu, następnie zapisuję jako plik csv i importuję w phpmyadmin. Używam polskich znaków i znaków specjalnych.

Zapisuję plik w excelu jako csv oddzielony przecinkami, importuję w phpmyadmin z kodowaniem windows-1250. Wtedy w bazie widzę dane z polskimi znakami i znakami specjalnymi ale na stronie już się krzaczy - strona jest w utf-8 więc jest to zrozumiałe.

+

Próbuję więc zapisać jako csv i potem w notepadzie++ zmieniam kodowanie, nie mogę wówczas w ogóle zaimportować pliku:

Próbowałem też w ustawieniach excela ustawić kodowanie na utf-8 i zapisać jako csv ale w bazie wygląda to w ten sposób:

 

Metoda porównywania napisów w opcjach tabeli jest ustawiona na utf8_polish_ci, w bazie także.

Kod ze strony, w której wyświetlam parametry z bazy:

<!DOCTYPE HTML>
<html lang="pl">

<head>
	<meta charset="utf-8" />
	<title>Test</title>
	<meta name="description" content="Co jest na stronie" />
	<meta name="keywords" content="test" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	<link rel="stylesheet" href="style.css" type="text/css" />


</head>

<body>

	<?php


			 require_once "connect.php";



 	    $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
 	    $dupa = "V40";

 	    if ($polaczenie->connect_errno!=0)
 	    {
 	        echo"Error: ".$polaczenie->connect_errno."Opis: ".$polaczenie->connect_error;


 	    }

 	    else

 	    {
 	        

		





	 				 $sql = "SELECT * FROM `table 13` WHERE id='1'";
	 			

	 						if ( $rezultat = @$polaczenie->query($sql))
	 						{


	 							$liczba_rekordow=$rezultat->num_rows;
	 			echo $liczba_rekordow;
	 								if ($liczba_rekordow>0)

	 								{


						 $wiersz = $rezultat->fetch_assoc();



$Kolumna1 = $wiersz['kolumna1'];


$Kolumna2 = $wiersz['kolumna2'];

$Kolumna3 = $wiersz['kolumna3'];


echo $Kolumna1;
echo '<br/>';
 echo $Kolumna2;
echo '<br/>'; 
echo $Kolumna3;


 	               }





 	           }

}

 	       $polaczenie->close();
 	    



echo<<<END
	<div id="container">

		<div id="logo">

		<h1>Nazwa strony</h1>

		</div>

		<div id="add">
		reklama
		</div>


		<div id="content">
		<br/><br/><br/><br/><br/><br/><br/><br/>
END;


?>






	<div id="footer">
		nazwastrony.com &copy; Wszelkie prawa zastrzeżone
	</div>



</body>

</html>

 

1 odpowiedź

0 głosów
odpowiedź 3 listopada 2018 przez obl Maniak (51,300 p.)
wybrane 5 listopada 2018 przez Gucci93
 
Najlepsza

Skoro dane w bazie danych wyświetlają się poprawnie dla tych, które masz zakodowane w windows-1250 to znaczy, że dane w tabeli nie są przechowywane w utf-8. Czyli metoda porównywania napisów jest źle ustawiona bo powinna być ustawiona na stronę kodową, w której w tabeli dane są przechowywane.

komentarz 3 listopada 2018 przez Gucci93 Użytkownik (570 p.)

Ale rozumiem, że skoro na stronie mam kodowanie utf-8 to powinienem wgrać do bazy plik csv z kodowaniem utf-8? Tak jak pisałem wyżej mam problem z wgrywaniem utf-8 ;/

komentarz 3 listopada 2018 przez obl Maniak (51,300 p.)

Zapisuję plik w excelu jako csv oddzielony przecinkami, importuję w phpmyadmin z kodowaniem windows-1250. Wtedy w bazie widzę dane z polskimi znakami i znakami specjalnymi ale na stronie już się krzaczy - strona jest w utf-8 więc jest to zrozumiałe.

To oznacza, że dane są w twojej tabeli przechowywane jako windows-1250, miałem kiedyś problem z kodowaniem i nie zmienisz już tego po utworzeniu tabeli.

Poza tym ja bym użył PDO do łączenia z bazą w taki sposób:

    <?php
    $mysql_host = 'localhost'; //tutaj jest localhost ale może być adres do bazy danych
    $port = '3306'; // domyślny numer portu
    $username = 'login';
    $password = 'hasło';
    $database = 'nazwa_bazy';
    try{
        $pdo = new PDO('mysql:host=' . $mysql_host . ';dbname=' . $database . ';port=' . $port . ";charset=utf8", $username, $password );
        echo('<p>Houston mamy połączenie!</p>');
    }catch(PDOException $e){
        echo('<p>Houston mamy problem! Nie możemy się połączyć!</p>');
        die(); // Nie połączyłeś się? To nie ma co robić nic więcej!
    }
    ?>

Masz tutaj charset=utf8 co powoduje, że dane z bazy danych zamieniane są do kodowania UTF-8

komentarz 5 listopada 2018 przez Gucci93 Użytkownik (570 p.)

Można też dodać do mojego kodu 

mysqli_set_charset($polaczenie,"utf8");

I są polskie znaki :) Dzięki za pomoc!

komentarz 6 listopada 2018 przez obl Maniak (51,300 p.)
No właśnie zapomniałem o tym, bo już nie używam mysqli

Podobne pytania

0 głosów
0 odpowiedzi 1,469 wizyt
pytanie zadane 28 sierpnia 2018 w SQL, bazy danych przez czujek22 Dyskutant (7,670 p.)
0 głosów
1 odpowiedź 475 wizyt
pytanie zadane 24 kwietnia 2020 w SQL, bazy danych przez progNewbie Obywatel (1,130 p.)
0 głosów
0 odpowiedzi 231 wizyt

93,732 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,293 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...