SweClockers drop!

Php och mysql - Tecken visas inte korrekt

Permalänk

Php och mysql - Tecken visas inte korrekt

Hej alla sweclockare!

Jag sitter och försöker lära mig php och mysql men har stött på ett litet problem. När jag importerar från mysql-databasen till hemsidan så blir de svenska tecknen fel om jag definerar teckenuppsättningen till utf-8 på både mysql och php-sidan. Om jag dock definerar den till iso-8859-1 på php-sidan så visas allting rätt. Varför blir det så om båda är inställda på utf-8 så borde det väl bli rätt.
När jag skapade databasen så gjorde jag det i vicken teckenuppsättning som nu var förinställd och bytte sedan i phpmyadmin till utf-8. Konverterar den inte de befintliga inläggen i databasen då eller?

Mvh
SpindelTiger

edit: Eller rättare sagt har jag ställt in collation i mysql till utf-8. Är detta nåt annat än teckenuppsättning/charset?

Permalänk
Hedersmedlem

Se mysqli::set_charset (eller mysql_set_charset om du använder det ej längre rekommenderade klassiska MySQL-biblioteket).

"Collation" specifikt behandlar bara om enligt vilken teckenkodning som posterna sorteras efter som standard.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk

Collation änvänds vad jag vet för att sortera data i tabellerna, dvs jämföra tecken. Du måste nog specificera vilken teckenkodning dina tabeller ska ha när du skapar tabellerna, alt ändra vilken som ska vara standard för din databas. Tror inte att data som redan finns i databasen konverteras automatiskt när du ändrar inställningarna. Någon får gärna rätta mig om jag har fel.

Länken under har jag funnit hjälpsam när jag stötte på problem med teckenkodning.
http://www.kodkodkod.se/2011/05/fran-latin1-till-utf-8-i-php-...

Permalänk

Ok har förstått nu att jag inte alls har ändrat charset i själva databaserna så det är inte så konstigt att det inte blev som jag tänkte mig.

Tack för hjälpen gubbar!

Permalänk
Legendarisk
Skrivet av SpindelTiger:

Ok har förstått nu att jag inte alls har ändrat charset i själva databaserna så det är inte så konstigt att det inte blev som jag tänkte mig.

Tack för hjälpen gubbar!

En viktig detalj här är att det inte bara är tabellen som har en viss teckenuppsättning, utan även anslutningen till databasen. Även om datan i din tabell är i UTF-8 så kommer den konverteras till anslutningens teckenuppsättning om dessa inte är samma.

http://dev.mysql.com/doc/refman/5.6/en/charset-connection.htm...

Skickades från m.sweclockers.com

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Glöm inte att spara filerna du ändrar i i utf-8 också!

T.ex om du skriver in åäö hårdkodat i filen och inte sparar i utf-8 kan det bli knasigt.

Permalänk
Skrivet av Tunnelsork:

En viktig detalj här är att det inte bara är tabellen som har en viss teckenuppsättning, utan även anslutningen till databasen. Även om datan i din tabell är i UTF-8 så kommer den konverteras till anslutningens teckenuppsättning om dessa inte är samma.

http://dev.mysql.com/doc/refman/5.6/en/charset-connection.htm...

Skickades från m.sweclockers.com

Det var intressant att höra för det hade jag ingen aning om. Har nämligen fortfarande inte fått det att funka

Permalänk
Skrivet av Ernesto:

Glöm inte att spara filerna du ändrar i i utf-8 också!

T.ex om du skriver in åäö hårdkodat i filen och inte sparar i utf-8 kan det bli knasigt.

Tack för tipset men det har jag redan fixat

Permalänk
Medlem

Det finns ENORMT mycket att tänka på när det gäller UTF-8 och PHP, PHP är inte gjort för UTF-8 i åtanke, det har kommit till senare och tja det är oftast ett ganska stort helvette att lösa alla problem på grund av detta.

Som sagt va, först så behöver du konvenera all text från teckenuppsättningen du haft innan till UTF-8, dvs uppdatera alla databas poster.

Sedan måste du skriva om all din PHP kod och ta hänsyn till UTF-8

http://allseeing-i.com/How-to-setup-your-PHP-site-to-use-UTF8 Här har du lite steg att börja med.

Sedan måste du läsa igenom denna http://www.phpwact.org/php/i18n/utf-8 så att du lär dig och förstår bristerna i PHP's UTF-8 hantering. Själv rekommenderar jag nästan alla andra server språk än PHP om du ska syssla med UTF-8

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 5090
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck, Rog Ally + de fiesta konsoler.

Permalänk
Skrivet av MugiMugi:

Det finns ENORMT mycket att tänka på när det gäller UTF-8 och PHP, PHP är inte gjort för UTF-8 i åtanke, det har kommit till senare och tja det är oftast ett ganska stort helvette att lösa alla problem på grund av detta.

Som sagt va, först så behöver du konvenera all text från teckenuppsättningen du haft innan till UTF-8, dvs uppdatera alla databas poster.

Sedan måste du skriva om all din PHP kod och ta hänsyn till UTF-8

http://allseeing-i.com/How-to-setup-your-PHP-site-to-use-UTF8 Här har du lite steg att börja med.

Sedan måste du läsa igenom denna http://www.phpwact.org/php/i18n/utf-8 så att du lär dig och förstår bristerna i PHP's UTF-8 hantering. Själv rekommenderar jag nästan alla andra server språk än PHP om du ska syssla med UTF-8

Tackar! Den första länken löste mitt problem. Genom att köra sql-frågorna:

SET NAMES utf8; SET CHARACTER SET utf8;

efter att man upprättat anslutningen till mysql så funkar det som det ska.

Nu kanske jag frågar efter mycket här. Men det är ingen som råkar veta om man inte kan konfigurera sin databas så att den använder utf-8 över anslutningen som standard istället för att hela tiden behöva lägga in dessa två rader kod hela tiden.

Permalänk
Medlem
Skrivet av SpindelTiger:

Nu kanske jag frågar efter mycket här. Men det är ingen som råkar veta om man inte kan konfigurera sin databas så att den använder utf-8 över anslutningen som standard istället för att hela tiden behöva lägga in dessa två rader kod hela tiden.

I din my.cnf fil: ( http://stackoverflow.com/questions/3513773/change-mysql-defau... )

[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set = utf8 collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8

Lite överflödigt kanske men ja, bättre att vara på den säkra sidan
Kolla i hela den tråden också, är lite olike beroende på mysql version

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk

Tack till alla! Alltid härligt att det finns gott om hjälpsamma själar på sweclockers